반응형
https://www.acmicpc.net/problem/4179
실수 하기 쉬운 것:
1. 불은 하나가 아니라 여러개 잇을 수가 있다.
2. BFS로 접근시 q에 넣을때는 불이 없는 지점이였지만 q에 빼서 다른곳으로 가는것을 처리할때 현재위치가 불인지 아닌지 한번더 check해야한다. 불이 있는곳에 사람이 있을수 없으니.
3. 이중 서치때 사람위치와 불의 위치들을 저장하고 사람먼저넣고 불을 넣으면 사람이 움직이고 불이 움직이는 시뮬레이션이 만들어진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
package com.ssafy.algo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class 불 {
static int N, M;
static char[][] map;
static class Pair {
int y;
int x;
char c;
public Pair(int y, int x, char c) {
super();
this.y = y;
this.x = x;
this.c = c;
}
}
static int dy[] = { 0, 0, -1, 1 };
static int dx[] = { 1, -1, 0, 0 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str[] = br.readLine().split(" ");
N = Integer.parseInt(str[0]);
M = Integer.parseInt(str[1]);
Pair startJ = null;
map = new char[N][M];
ArrayList<Pair> startF = new ArrayList<>();
for (int i = 0; i < N; i++) {
map[i] = br.readLine().toCharArray();
for (int j = 0; j < M; j++) {
if (map[i][j] == 'J') {
startJ = new Pair(i, j, 'J');
}
if (map[i][j] == 'F') {
startF.add(new Pair(i, j, 'F'));
}
}
}
Queue<Pair> q = new LinkedList<>();
q.add(startJ);
q.add(startF.get(i));
}
int Answer = -1;
int time = 0;
while (!q.isEmpty()) {
int size = q.size();
for (int s = 0; s < size; s++) {
Pair tmp = q.poll();
if (tmp.c == 'J') {
if (tmp.y < 0 || tmp.x < 0 || tmp.y >= N || tmp.x >= M) {
Answer = time;
break;
}
else if(map[tmp.y][tmp.x]=='F')continue;
else {
for (int d = 0; d < 4; d++) {
int ny = tmp.y + dy[d];
int nx = tmp.x + dx[d];
if (ny < 0 || nx < 0 || ny >= N || nx >= M) {
q.add(new Pair(ny,nx,'J'));
}else {
if (map[ny][nx] != '.')
continue;
map[ny][nx] = 'J';
q.add(new Pair(ny, nx, 'J'));
}
}
}
} else {
for (int d = 0; d < 4; d++) {
int ny = tmp.y + dy[d];
int nx = tmp.x + dx[d];
if (ny < 0 || nx < 0 || ny >= N || nx >= M)
continue;
if (map[ny][nx] == '#')
continue;
if (map[ny][nx] == 'F')
continue;
map[ny][nx] = 'F';
q.add(new Pair(ny, nx, 'F'));
}
}
}
if (Answer != -1)
break;
time++;
}
if (Answer != -1) {
System.out.println(Answer);
} else {
System.out.println("IMPOSSIBLE");
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
반응형
'ProgramSoliving' 카테고리의 다른 글
백준 : 9466 (텀 프로젝트) (0) | 2020.02.23 |
---|---|
백준 : 1707 (0) | 2020.02.22 |
백준 : 3109 (0) | 2020.02.20 |
백준 : 2842 JAVA (2) | 2020.02.15 |
백준 : 11279 (0) | 2020.02.09 |