Tags
- ์๋ฃ๊ตฌ์กฐ
- ๋๋น ์ฐ์ ํ์
- BFS
- Brute Force Algorithm
- greedy
- SpringBoot
- dfs
- DP
- ๊ทธ๋ํ ํ์
- queue
- Dynamic Programming
- CodingTest
- Study
- ์ ๋ ฌ
- ๊ต์ฌ
- sort
- ๊ตฌํ
- Java
- PGM
- ๊ทธ๋ํ ์ด๋ก
- LV2
- stack
- ์๋ฎฌ๋ ์ด์
- Python
- BOJ
- ์ํ
- ๊น์ด ์ฐ์ ํ์
- ์ ์๋ก
- ๋ฌธ์์ด
- ๋ฐฑํธ๋ํน
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_4179 : ๋ถ! ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- R x C ๊ฒฉ์ํ์์ ์งํ์ด์ ์์น์ ๋ถ๋ค์ ์์น๊ฐ ์ฃผ์ด์ง๋ค.
- ์งํ์ด๋ 1๋ถ์ ์ํ์ข์ฐ 4๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์๊ณ , ๋ถ๋ 1๋ถ์ 4๋ฐฉํฅ์ผ๋ก ํ์ฐ๋๋ค.
- ๊ฒฉ์ํ์ ๊ฐ์ฅ์๋ฆฌ๋ก ๊ฐ๋ฉด ๋ฏธ๋ก๋ฅผ ํ์ถ ํ ์ ์๋ค.
- ์งํ์ด๊ฐ ๋ถ์ ํผํด ๋ฏธ๋ก๋ฅผ ํ์ถํ๊ธฐ ์ํ ์ต๋จ์๊ฐ์ ์ถ๋ ฅํ๋ค.
๋ง์ฝ ํ์ถํ์ง ๋ชปํ๋ค๋ฉด "IMPOSSIBLE"์ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ๊ฒฉ์ํ์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋จ์ BFS ๋ฌธ์ ์ด๋ค. ํ์ง๋ง ์งํ์ด์ ์ด๋๊ณผ ๋ถ์ ํ์ฐ ๋ชจ๋ ๊ณ ๋ คํด์ผ ํ๋ค.
- ํ๋ฅผ ์ด์ฉํ BFS ๊ตฌํ์์ ํ ์ฌ์ด์ฆ๋งํผ ๋ฐ๋ณตํด์ '1๋ถ'์ ์์ง์์ ์ ํํด์ผ ํ๋ค.
- ์งํ์ด์ ์์น๋ ๋งต์ ๊ทธ๋ฆฌ์ง ์๊ณ ํ์๋ง ๋ฃ๊ณ , ๋ถ์ ๋งต์ 'F'๋ก ํ์ํด ๊ฐ๋ค.
- ์งํ์ด๋ ๋ถ๋ก ์ด๋ํ ์ ์์ ๋ฟ๋ง ์๋๋ผ, ํ์์ ๊บผ๋์ ๋ ํ์ฌ ์์น๊ฐ 'F'๋ก ๋์ด์์ผ๋ฉด ๋ถ์ ์ง์ด์ผ์ผ์ง ๊ฒ์ด๋ฏ๋ก ๋ค์ ์์๋ฅผ ํ์ธํ๋ค.
- ์งํ์ด๊ฐ ๊ฐ์ฅ์๋ฆฌ๋ก ์ด๋ํ๋ค๋ฉด ๋ฐ๋ก ์ ๋ต์ ๋ฐํํ๊ณ , ๋ง์ฝ ํ๊ฐ ๋น์ด์ง ๋ ๊น์ง ํ์ถํ์ง ๋ชปํ๋ค๋ฉด 0์ ๋ฐํํด์ "IMPOSSIBLE"์ ์ถ๋ ฅํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
private static final int[] dx = {-1, 0, 1, 0};
private static final int[] dy = {0, 1, 0, -1};
private static int R, C;
private static char[][] map;
private static Queue<Point> run, burn;
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
R = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
map = new char[R][C];
run = new ArrayDeque<>();
burn = new ArrayDeque<>();
for (int i = 0; i < R; i++) {
char[] chars = br.readLine().toCharArray();
for (int j = 0; j < C; j++) {
if (chars[j] == 'J') {
run.add(new Point(i, j));
map[i][j] = '.';
} else if (chars[j] == 'F') {
burn.add(new Point(i, j));
map[i][j] = 'F';
} else
map[i][j] = chars[j];
}
}
// BFS
int result = escape();
// Output
if (result == 0)
bw.write("IMPOSSIBLE");
else
bw.write(Integer.toString(result));
bw.flush();
}
private static int escape() {
boolean[][] visited = new boolean[R][C];
visited[run.peek().row][run.peek().col] = true;
int cnt = 0;
while (!run.isEmpty()) {
int size = run.size();
// ์งํ ์ด๋
for (int i = 0; i < size; i++) {
Point jihun = run.poll();
if (map[jihun.row][jihun.col] == 'F') {
continue;
}
for (int j = 0; j < 4; j++) {
int row = jihun.row + dx[j];
int col = jihun.col + dy[j];
if (0 > row || row >= R || 0 > col || col >= C) {
return cnt + 1;
}
if (!visited[row][col] && map[row][col] == '.') {
visited[row][col] = true;
run.add(new Point(row, col));
}
}
}
cnt++;
// ๋ถ ๋ฒ์ง
size = burn.size();
for (int i = 0; i < size; i++) {
Point fire = burn.poll();
for (int j = 0; j < 4; j++) {
int row = fire.row + dx[j];
int col = fire.col + dy[j];
if (0 <= row && row < R && 0 <= col && col < C && map[row][col] == '.') {
map[row][col] = 'F';
burn.add(new Point(row, col));
}
}
}
}
return 0;
}
private static class Point {
int row, col;
public Point(int row, int col) {
this.row = row;
this.col = col;
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- charํ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋งต ์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ๊ณ , ์งํ์ด์ ์์ ์์น๋ ์ขํ๋ง ํ์ ๋ด๊ณ '.'์ผ๋ก ๊ธฐ๋กํ๋ค.
- ๋ถ์ ์์ ์์น๋ ํ์ ๋ด์ง๋ง, ๋งต์๋ 'F'๋ฅผ ๊ธฐ๋กํ๋ค.
- BFSํ์์ escape() ๋ฉ์๋์์ ์งํํ๋ค.
- 1๋ถ์ ์๊ฐ ํ๋ฆ์ cnt์ ๋์ ํด์ ๊ธฐ๋กํ๊ณ , ์งํ์ด๊ฐ ํ์ถํ์ ์ cnt๋ฅผ ๋ฐํํ๋ค.
- ์งํ์ด ์์น ํ์ ๋ชจ๋ ์์๋ฅผ ํ์ธํ์ ๋์๋ ํ์ถํ์ง ๋ชปํ๋ค๋ฉด 0์ ๋ฐํํ๋ค.
- ๋ฐํ๊ฐ์ ๋ฐ๋ผ ์ต์ ์๊ฐ ํน์ "IMPOSSIBLE"์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ์๊ณ ๋ฆฌ์ฆ ์์ฒด๋ BFS๋ก ๊ฐ๋จํ์ง๋ง, ์์ ํ ๋ ๋ถ์ ์์น๊ฐ ์ฌ๋ฌ๊ฐ์ผ ์ ์๋ค๋ ์ ์ ๋์น๊ณ ํ๋ ธ๋ค.
- ๋์ฑ ๋ฌธ์ ๋ฅผ ์์ธํ ์ฝ์ ํ์๊ฐ ์๋ค... ๋ค์ ๋ฌธ์ ์์๋ ์ ์ถ ์ ์ ํ ์คํธ ์ผ์ด์ค๋ ๋ง์ด ๋ง๋ค๊ณ , ํ ๋ฒ์ ๋ง์ถ๋๊ฑธ ๋ชฉํ๋ก ํด์ผ๊ฒ ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_24042 : ํก๋จ๋ณด๋ (0) | 2024.08.01 |
---|---|
BOJ_25945 : ์ปจํ ์ด๋ ์ฌ๋ฐฐ์น (0) | 2024.06.15 |
BOJ_1937 : ์์ฌ์์ด ํ๋ค (0) | 2024.06.10 |
BOJ_2146 : ๋ค๋ฆฌ ๋ง๋ค๊ธฐ (0) | 2024.05.29 |
BOJ_15685 : ๋๋๊ณค ์ปค๋ธ (0) | 2024.05.26 |