Tags
- Java
- dfs
- ์๋ฃ๊ตฌ์กฐ
- Study
- ๊ต์ฌ
- ๋๋น ์ฐ์ ํ์
- ๊ทธ๋ํ ์ด๋ก
- Brute Force Algorithm
- ์๋ฎฌ๋ ์ด์
- ๊น์ด ์ฐ์ ํ์
- DP
- stack
- ๊ตฌํ
- greedy
- Dynamic Programming
- ์ํ
- sort
- SpringBoot
- BOJ
- CodingTest
- ์ ์๋ก
- BFS
- PGM
- ๋ฌธ์์ด
- ๊ทธ๋ํ ํ์
- ๋ฐฑํธ๋ํน
- ์ ๋ ฌ
- LV2
- queue
- Python
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_2573 : ๋น์ฐ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ๋ฐ๋ท๋ฌผ๊ณผ ๋ง๋ฟ์ ๋นํ๋ 1๋ ๋ง๋ค ์ํ์ข์ฐ์ ๋ฐ๋ท๋ฌผ ์ ๋งํผ ์ค์ด๋ ๋ค.
- ๋นํ๊ฐ ๋ ๋ฉ์ด๋ฆฌ ์ด์์ผ๋ก ๋๋์ด์ง๋ ์ต์ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
- ๋๊น์ง ๋ ๋ฉ์ด๋ฆฌ๊ฐ ๋์ง ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ๋นํ๊ฐ ๋ น๋๊ฑด 4๋ฐฉํ์์ ํ๋ฉด ๋๊ณ , ๋ฉ์ด๋ฆฌ ํ์ธ์ ๊ทธ๋ํ ํ์๊ณผ 4๋ฐฉ ํ์์ ํจ๊ผ ํ๋ฉด ๋๋ค.
- ์ฌ๊ธฐ์๋ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋๋น ์ฐ์ ํ์ (BFS) ๋ฅผ ์ฌ์ฉํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
private static int N, M;
private static int[][] map;
private static int[] dx = {-1, 0, 1, 0};
private static int[] dy = {0, 1, 0, -1};
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());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new int[N][M]; // ๋ฒ์ ๋ฒ์ด๋๋๊ฑฐ ์ ๊ฒฝ ์์ฐ๋ ค๊ณ +2๋ก ํจ๋ฉ ๊ฐ์ธ๊ธฐ
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
int answer = 0;
while (true) {
nextYear(); // ๋น์ฐ ๋
น์
answer++;
int result = check(); // BFS ๋น์ฐ ๋ถ๋ฆฌ ํ์ธ
if (result >= 2) break;
else if (result == 0) {
answer = 0;
break;
}
}
// Output
bw.write(Integer.toString(answer));
bw.flush();
}
private static int check() {
boolean[][] flag = new boolean[N][M];
Queue<Point> que = new ArrayDeque<>();
int result = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (map[i][j] > 0 && !flag[i][j]) {
flag[i][j] = true;
que.add(new Point(i, j));
result++;
while (!que.isEmpty()) {
Point p = que.poll();
for (int k = 0; k < 4; k++) {
int x = p.x + dx[k];
int y = p.y + dy[k];
if (0 <= x && x < N && 0 <= y && y < M && !flag[x][y] && map[x][y] > 0) {
flag[x][y] = true;
que.add(new Point(x, y));
}
}
}
}
}
}
return result;
}
private static void nextYear() {
boolean[][] flag = new boolean[N][M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (map[i][j] > 0) {
flag[i][j] = true;
for (int k = 0; k < 4; k++) {
int x = i + dx[k];
int y = j + dy[k];
if (0 <= x && x < N && 0 <= y && y < M && !flag[x][y] && map[x][y] == 0) {
map[i][j]--;
}
}
map[i][j] = Math.max(map[i][j], 0);
}
}
}
}
private static class Point {
int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- nextYear() ๋ฉ์๋์์ 4๋ฐฉํ์์ผ๋ก map ์ ๋ น์ ๋น์ฐ์ ๊ธฐ๋กํ๋ค.
- check() ๋ฉ์๋์์ BFS๋ก ๋น์ฐ์ ๋ฉ์ด๋ฆฌ ์๋ฅผ ๊ตฌํด ๋ฐํํ๋ค.
๐ธ end ๐ธ
- 4๋ฐฉ ํ์์ ํ๋ฉด ๋์ด๋ผ ๋ฑํ ์ด๋ ค์ธ ๊ฒ ์์ด ํ ์ ์์๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_14002 : ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 4 (0) | 2024.05.01 |
---|---|
BOJ_1922 : ๋คํธ์ํฌ ์ฐ๊ฒฐ (0) | 2024.04.30 |
BOJ_14499 : ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2024.04.26 |
BOJ_1976 : ์ฌํ ๊ฐ์ (0) | 2024.04.22 |
BOJ_2580 : ์ค๋์ฟ (0) | 2024.04.19 |