Tags
- ๊ตฌํ
- ์๋ฎฌ๋ ์ด์
- LV2
- ์ ์๋ก
- ๊ทธ๋ํ ํ์
- ์ํ
- ๊ทธ๋ํ ์ด๋ก
- dfs
- BOJ
- ๋๋น ์ฐ์ ํ์
- ์ ๋ ฌ
- Brute Force Algorithm
- Java
- CodingTest
- SpringBoot
- sort
- ๋ฐฑํธ๋ํน
- Dynamic Programming
- ๋ฌธ์์ด
- greedy
- stack
- ๊ต์ฌ
- ์๋ฃ๊ตฌ์กฐ
- queue
- Study
- ๊น์ด ์ฐ์ ํ์
- PGM
- BFS
- DP
- Python
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_2206 : ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N * M ํ๋ ฌ ๋งต์์ (1, 1)๋ถํฐ (N, M) ๊น์ง ์ด๋ํ๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค.
- ์ธ์ ํ ์ํ์ข์ฐ๋ก 1์นธ์ฉ ์ด๋ํ ์ ์๋ค.
- ์ด๋ํ ์ ์๋ ์นธ์ 0, ๋ฒฝ์ 1๋ก ํ์๋๋๋ฐ, 1๋ฒ ๋ฒฝ์ ๋ถ์๊ณ ์ด๋ํ ์ ์๋ค.
- ํ๋ ฌ์์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ฏ๋ก BFS๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ฒฝ์ ๋ถ์๊ณ ๋จผ์ ๋์ฐฉํ์๋ ์นธ์ ๋ฒฝ์ ๋ถ์์ง ์๊ณ ๋์ฐฉํ๋ค๋ฉด, ์ด์ด์ ํ์ํด๋ณด์์ผ ํ๋ค.
- ๋ฒฝ์ ๋ถ์์ง์๊ณ ๋จผ์ ๋์ฐฉํ๋ ์นธ์ด๋ฉด ๋ ํ์ํด๋ณผ ํ์๊ฐ ์๋ค.
- N == 1, M == 1 ์ธ ๊ฒฝ์ฐ๋ ๋ฐ๋ก ์์ธ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
private static class Point {
int x, y;
boolean flag;
public Point(int x, int y, boolean flag) {
this.x = x;
this.y = y;
this.flag = flag;
}
}
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());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[][] map = new int[N + 1][M + 1];
for (int i = 1; i <= N; i++) {
char[] chars = br.readLine().toCharArray();
for (int j = 1; j <= M; j++) {
map[i][j] = chars[j - 1] - '0';
}
}
// BFS
Queue<Point> que = new ArrayDeque<>();
int[][] visited = new int[N + 1][M + 1]; // 0: ๋ฐฉ๋ฌธ X, 1: ๋ฒฝ๋ถ์๊ณ ๋ฐฉ๋ฌธ, 2: ๋ฒฝ์๋ถ์๊ณ ๋ฐฉ๋ฌธ
que.add(new Point(1, 1, false));
visited[1][1] = 1;
int cnt = 1;
while (!que.isEmpty()) {
int size = que.size();
for (int i = 0; i < size; i++) {
Point point = que.poll();
if (point.x == N && point.y == M)
break;
for (int j = 0; j < dx.length; j++) {
int row = point.x + dx[j];
int col = point.y + dy[j];
if (0 < row && row <= N && 0 < col && col <= M) {
// ๋ฒฝ์ธ ๊ฒฝ์ฐ
if (map[row][col] == 1 && !point.flag) {
visited[row][col] = 1;
que.add(new Point(row, col, true));
}
// ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ
if (map[row][col] == 0) {
if (visited[row][col] == 0) {
visited[row][col] = point.flag ? 1 : 2;
que.add(new Point(row, col, point.flag));
} else if (visited[row][col] == 1 && !point.flag) {
visited[row][col] = 2;
que.add(new Point(row, col, false));
}
}
}
}
}
cnt++;
if (visited[N][M] > 0)
break;
}
if (N == 1 && M == 1)
cnt--;
// Output
if (visited[N][M] == 0)
bw.write(Integer.toString(-1));
else
bw.write(Integer.toString(cnt));
bw.flush();
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- BFS๋ฅผ ์ํด ์ขํ์ ๋ฒฝ ๋ถ์๊ธฐ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ๋ด์ Point ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ฐฉ๋ฌธ์ฒดํฌ๋ intํ 2์ฐจ์ ๋ฐฐ์ด visited๋ฅผ ์ฌ์ฉํ๋ค.
- 0 : ์์ง ๋ฐฉ๋ฌธํ์ง ์์.
- 1 : ๋ฒฝ์ ๋ถ์๊ณ ๋ฐฉ๋ฌธํ์.
- 2 : ๋ฒฝ์ ๋ถ์์ง ์๊ณ ๋ฐฉ๋ฌธํ์.
- BFS์ while๋ฌธ์์ ํ์ ํฌ๊ธฐ๋งํผ ๋ฐ๋ณตํด์ ์ด๋ ํ์๋ฅผ ์ผ์น์ํค๋ฉฐ ๊ณ์ฐํ๋ค.
- 4๋ฐฉํ์ ์ด๋์์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ์ฒ๋ฆฌํ๋ค.
- ๋ฒฝ์ ๋ง๋ฌ๋๋ฐ ์์ง ๋ฒฝ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ์ง ์์์ผ๋ฉด, ์ผ๋จ ๋ถ์๊ณ ์งํํด๋ณธ๋ค.
- ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ๋ 2 ๊ฐ์ง๋ก ๋๋ ์ ์ฒ๋ฆฌํ๋ค.
- ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์นธ์ด๋ฉด ๊ทธ๋๋ก ์งํํ๋ค.
- ๋ฒฝ์ ๋ถ์๊ณ ๋ฐฉ๋ฌธํ๋ ๊ณณ์ธ๋ฐ, ํ์ฌ ๋ฒฝ์ ๋ถ์์ง ์์๋ค๋ฉด ์งํํด๋ณธ๋ค.
(๋ค๋ฅธ ๊ณณ์ ๋ถ์๋๊ฒ ๋ ์ต๋จ๊ฑฐ๋ฆฌ์ผ ์ ์๊ธฐ ๋๋ฌธ)
- N==1์ด๊ณ M==1 ์ผ ๋ ์์ธ์ฒ๋ฆฌ๋ก cnt ๋ฅผ -1ํ๋ค.
- (N, M)์ ๋ฐฉ๋ฌธํ๋ค๋ฉด cnt๋ฅผ, ์๋๋ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ๋ฒฝ์ ๋ถ์๊ณ ๋จผ์ ๋์ฐฉํ๋๋ผ๋, ๋ฒฝ์ ๋ถ์์ง ์๊ณ ๋์ฐฉํ ์๋๋ฅผ ์ด์ด์ ํ์ํด์ผ ํ๋๊ฒ ์ค์ ํฌ์ธํธ์๋ค.
- N==1 && M==1 ์ธ ๊ฒฝ์ฐ๋ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๋ฉฐ ์กฐ์ฌํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ์๋๋ฐ, ์ฝ๋ฉ ํ์ ๊น๋จน๊ณ ํ ์คํธํ์ง ์์์ 1ํ ํ๋ฆฌ๊ฒ ๋์๋ค. ์์ฆ ํ์ด ์ ๋ต์ ์ ์ง ์๊ณ ๋์ถฉ ํ์ดํ๊ฒ ๋๋๋ฐ, ๋ค์ ๊ผผ๊ผผํ๊ฒ ํ๋ ์ต๊ด์ ๋ค์ฌ์ผ๊ฒ ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Lv.2 : ์ต๋๊ฐ๊ณผ ์ต์๊ฐ (0) | 2023.09.05 |
---|---|
BOJ_2448 : ๋ณ ์ฐ๊ธฐ - 11 (0) | 2023.08.28 |
BOJ_2096 : ๋ด๋ ค๊ฐ๊ธฐ (0) | 2023.08.03 |
BOJ_1918 : ํ์ ํ๊ธฐ์ (0) | 2023.07.09 |
BOJ_1753 : ์ต๋จ๊ฒฝ๋ก (0) | 2023.07.02 |