Tags
- BFS
- Python
- PGM
- BOJ
- ์๋ฃ๊ตฌ์กฐ
- Brute Force Algorithm
- LV2
- ์ ๋ ฌ
- greedy
- ๊ต์ฌ
- Study
- ๊น์ด ์ฐ์ ํ์
- DP
- ๋๋น ์ฐ์ ํ์
- SpringBoot
- dfs
- stack
- Dynamic Programming
- ๋ฌธ์์ด
- queue
- Java
- ๊ทธ๋ํ ์ด๋ก
- CodingTest
- ๊ทธ๋ํ ํ์
- sort
- ์ํ
- ๊ตฌํ
- ๋ฐฑํธ๋ํน
- ์๋ฎฌ๋ ์ด์
- ์ ์๋ก
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1600 : ๋ง์ด ๋๊ณ ํ ์์ญ์ด ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- H x W ๊ฒฉ์ ํ์์ ์ผ์ชฝ ์ ๋ ๋ถํฐ ์ค๋ฅธ์ชฝ ์๋ ๋ ๊น์ง ๊ฐ๋ ๋์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
- ์์ญ์ด์ ์์ง์ : ์ธ์ 4์นธ์ผ๋ก ์ด๋ ๊ฐ๋ฅ
- ๋ง์ ์์ง์ : k๋ฒ ๋งํผ ์ด๋ ๊ฐ๋ฅ
- BFS๋ก 2๊ฐ์ง ํ์ด๋ฅผ ํ ์ ์๋ค.
- ๋ง ์ด๋ ํ์๋ฅผ ์ ๊ฒ ์ธ ์๋ก ์ข๋ค.(๊ทธ๋ฆฌ๋)
- 3์ค ๋ฐฐ์ด๋ก ๋ฐฉ๋ฌธ์ ์ฒดํฌํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
private static int K, H, W;
private static int[][] map;
private static class Monkey {
int r, c, horse;
public Monkey(int r, int c, int horse) {
this.r = r;
this.c = c;
this.horse = horse;
}
@Override
public String toString() {
return "Monkey{" +
"r=" + r +
", c=" + c +
", horse=" + horse +
'}';
}
}
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
K = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
W = Integer.parseInt(st.nextToken());
H = Integer.parseInt(st.nextToken());
map = new int[H][W];
for (int i = 0; i < H; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < W; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
//BFS + Output
System.out.println(bfs());
}
private static int bfs() {
int[] dr = {-1, 0, 1, 0, -2, -1, 1, 2, 2, 1, -1, -2};
int[] dc = {0, 1, 0, -1, 1, 2, 2, 1, -1, -2, -2, -1};
int[][] visited = new int[H][W];
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
visited[i][j] = Integer.MAX_VALUE; // ์ด๊ฑฐ๋ณด๋ค ์คํฌ ์ ๊ฒ ์ด ์์ญ์ด? ์ฌ๊ธฐ์๋ ํด๋ด๋ฐ
}
}
Queue<Monkey> que = new LinkedList<>();
que.add(new Monkey(0, 0, 0));
visited[0][0] = 0;
int cnt = 0;
while (!que.isEmpty()) {
int size = que.size();
for (int i = 0; i < size; i++) {
Monkey m = que.poll();
// System.out.println(m);
if (m.r == H - 1 && m.c == W - 1) return cnt;
for (int j = 0; j < 4; j++) {
int r = m.r + dr[j];
int c = m.c + dc[j];
if (0 <= r && r < H && 0 <= c && c < W && visited[r][c] > m.horse && map[r][c] == 0) {
que.add(new Monkey(r, c, m.horse));
visited[r][c] = m.horse;
}
}
if (m.horse < K) {
for (int j = 4; j < 12; j++) {
int r = m.r + dr[j];
int c = m.c + dc[j];
if (0 <= r && r < H && 0 <= c && c < W && visited[r][c] > m.horse+1 && map[r][c] == 0) {
que.add(new Monkey(r, c, m.horse + 1));
visited[r][c] = m.horse+1;
}
}
}
}
cnt++;
}
return -1;
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- BFS๋ก ๊ฐ ์์ง์ ๋ณ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ํ์ธํ๋ค.
- ๊ฐ์ฅ ๋จผ์ ๋์ฐฉํ ๊ฒฝ์ฐ๊ฐ ์์ง์์ ์ต์๊ฐ์ด๋ค.
- ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ int 2์ฐจ์ ๋ฐฐ์ด visited๋ฅผ ์ด์ฉํ๋ค.
- ๋ง ์ด๋์ ์ต์๋ก ์ฌ์ฉํ ์๋ก ์ข์ผ๋ฏ๋ก, ๋ ์ ์ ๊ฒฝ์ฐ ๊ฐ์ ๊ฐฑ์ ํ๋ค.
- ์์ญ์ด์ ์ด๋๊ณผ ๋ง ์ด๋์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ํ์ ๋ด๊ณ ๊ณ์ฐ์ ๋ฐ๋ณตํ๋ค.
๐ธ end ๐ธ
- ์ฒ์์ ๋ง ์ด๋์ K๋ถํฐ ํ๋์ฉ ์ฐจ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ํ๋๋ฐ, ์ฝ๋๊ฐ ๊ผฌ์ฌ์ ์ค๋ต์ด ๋ง์์ก๋ค.
- ๋ค์ํธ๋ ๊ณผ์ ์์ 0๋ถํฐ K์ ๊น์ง ๋ง ์ด๋์ ์งํํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟจ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_17141 : ์ฐ๊ตฌ์ 2 (0) | 2023.04.06 |
---|---|
BOJ_2636 : ์น์ฆ (0) | 2023.04.06 |
BOJ_10971 : ์ธํ์ ์ํ 2 (0) | 2023.04.06 |
BOJ_1010 : ๋ค๋ฆฌ ๋๊ธฐ (0) | 2023.04.06 |
BOJ_1463 : 1๋ก ๋ง๋ค๊ธฐ (0) | 2023.03.30 |