
๐๏ธ ๋ฌธ์
๐ข ํ๋ฆฐ ์ด์
๋ถ์ด ํผ์ง๋ ๊ฐ๊ฒฉ๊ณผ ์๊ทผ์ด๊ฐ ์์ง์ด๋ ๊ฐ๊ฒฉ์ด ๊ฐ์ผ๋ ค๋ฉด BFS๋ฅผ ๋๋ฆด ๋ ๋ถ์ด ๊ฐ ๊ณณ์ ํ์ํ๊ณ que์ ๋ฃ๋ depth์ ์๊ทผ์ด๊ฐ ์ด๋ํ๋ depth๊ฐ ๊ฐ์์ผ ํ๋ค.
๊ทธ ๋ถ๋ถ์ ๊ตฌํํ์ง ๋ชปํด์ ๊ณ์ ๋ชจ๋ ๋ฌธ์ ๊ฐ "IMPOSSIBLE"์ด ๋์๋ค.
๐ ์ ๋๋ก ๋ ์ฝ๋
์ ๋๋ก ๋ฌธ์ ๋ฅผ ํ๋ ค๋ฉด ๋ถ์ ๋ฃ๋ ํ ์ฌ์ด์ฆ๋งํผ๋ง ๋ค์ ์ขํ๋ฅผ ํ์ํ๊ณ ์๊ทผ์ด๋ ์๊ทผ์ด์ ํ ์ฌ์ด์ฆ๋งํผ๋ง ๋ค์ ์ขํ๋ฅผ ํ์ํ๊ณ ์ด๋์์ผ์ฃผ์ด ๋์ด ์์ง์ด๋ ๊ฐ๊ฒฉ์ ๋ง์ถฐ์ค์ผ ํ๋ค.
์ฃผ์ ์ฝ๋
while (!sangQ.isEmpty()){
int firesize = fireQ.size();
int sangsize = sangQ.size();
for (int i = 0; i < firesize; i++){
... ์๋ต ...
}
for (int i = 0; i < sangsize; i++){
... ์๋ต ...
}
โ ๏ธ for๋ฌธ์ ํ์ size๋ฅผ ๋ฃ์ด์ค ๋ ์์ฃผํ๋ ์ค์๊ฐ ์๋๋ฐ..
๋ฐ๋ณต๋ฌธ ๋ฒ์์ ๋ฐ๋ก que.size() ๋ก ๋ฃ์ด์ฃผ๋ฉด ๋ฐ๋ณต๋ฌธ์ด ์คํ๋๋ฉด์ ๋์ ์ผ๋ก ๋ณํํ๋ค. ๋ฐ๋ผ์ ํ์ํ ํ์๋งํผ ๋ฐ๋ณต๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ณ์์ ๋์ ํ์ฌ ์ฃผ์ด์ผ ํ๋ค. ์์ฃผ ํใน๋ฆผ...ใ
๊ทธ ์ธ ๋ก์ง ์ค๋ฅ
1. ์ถ๊ตฌ ํ๋ณ ์กฐ๊ฑด๋ฌธ
if (cr == 0 || cc == 0 || cr == h-1 || cc == w-1) { // ์ถ๊ตฌ ํ๋ณ
System.out.println(sang[2]);
return;
}
์ด ๋ถ๋ถ์ ์ฌ๋ฐฉํ์ for ๋ฌธ ์์ ์์ฑํด๋์ด์ ์๋์ ๊ฐ์ ๋ฐ๋ก๊ฐ ์กด์ฌํ๋ค.
.@
..
output 2
answer 1
์ ์ฒด ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main { // BOJ_5427_๋ถ
static int[] dr = {-1, 1, 0, 0};
static int[] dc = {0, 0, -1, 1};
static char[][] map;
static boolean[][] visited;
static ArrayDeque<int[]> sangQ;
static ArrayDeque<int[]> fireQ;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for (int tc =0; tc<T; tc++){
st = new StringTokenizer(br.readLine());
int w = Integer.parseInt(st.nextToken()); // ์ง๋ ๋๋น c
int h = Integer.parseInt(st.nextToken()); // ์ง๋ ๋์ด r
map = new char[h][w];
visited = new boolean[h][w];
sangQ = new ArrayDeque<>();
fireQ = new ArrayDeque<>();
for (int i = 0; i < h; i++){
String str = br.readLine();
for (int j = 0; j < w; j++){
char ch = str.charAt(j);
if (ch == '@'){
sangQ.add(new int[] {i, j, 1});
}
if (ch == '*'){
fireQ.add(new int[] {i, j});
}
map[i][j] = ch;
}
} // map end
bfs(h, w);
}
}
private static void bfs(int h, int w){
while (!sangQ.isEmpty()){
int firesize = fireQ.size();
int sangsize = sangQ.size();
for (int i = 0; i < firesize; i++){
int[] fire = fireQ.poll();
for (int d = 0; d < 4; d++){
int nr = fire[0] + dr[d];
int nc = fire[1] + dc[d];
if (nr < 0 || nc < 0 || nr >= h || nc >= w || map[nr][nc] == '#' || map[nr][nc] == '*') continue;
fireQ.add(new int[] {nr, nc});
map[nr][nc] = '*';
}
}
for (int i = 0; i < sangsize; i++){
int[] sang = sangQ.poll();
int cr = sang[0];
int cc = sang[1];
if (cr == 0 || cc == 0 || cr == h-1 || cc == w-1) { // ์ถ๊ตฌ ํ๋ณ
System.out.println(sang[2]);
return;
}
for (int d = 0; d < 4; d++){
int nr = sang[0] + dr[d];
int nc = sang[1] + dc[d];
if (nr < 0 || nc < 0 || nr >= h || nc >= w || map[nr][nc] != '.' || visited[nr][nc]) continue;
sangQ.add(new int[] {nr, nc, sang[2]+1});
visited[nr][nc] = true;
}
}
}
System.out.println("IMPOSSIBLE");
}
}
'์๋ฃ๊ตฌ์กฐ, ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฌธ์ ํ์ด] ๋ฐฑ์ค 1697 ์จ๋ฐ๊ผญ์ง (1) | 2025.02.13 |
---|---|
[๋ฌธ์ ํ์ด] SWEA 4615. ์ฌ๋ฏธ์๋ ์ค์ ๋ก ๊ฒ์ (0) | 2024.08.12 |
[๋ฌธ์ ํ์ด] ํ๋ณตํ ์์ด์ ๊ฐ์ (feat. ์ฝ๋ํธ๋ฆฌ ์กฐ๋ณ๊ณผ์ : 4์ฃผ์ฐจ) (3) | 2024.08.11 |
[์ด๋ก ] ๋ฐฐ์ด (feat. ์ฝ๋ํธ๋ฆฌ ์กฐ๋ณ๊ณผ์ : 3์ฃผ์ฐจ) (1) | 2024.08.04 |
[์ด๋ก ] ๊ณต๊ฐ๋ณต์ก๋ (feat. ์ฝ๋ํธ๋ฆฌ ์กฐ๋ณ๊ณผ์ : 1์ฃผ์ฐจ) (0) | 2024.07.19 |