https://www.acmicpc.net/problem/2665
๋ฌธ์
n×n ๋ฐ๋ํ ๋ชจ์์ผ๋ก ์ด n2๊ฐ์ ๋ฐฉ์ด ์๋ค. ์ผ๋ถ๋ถ์ ๊ฒ์ ๋ฐฉ์ด๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ํฐ ๋ฐฉ์ด๋ค. ๊ฒ์ ๋ฐฉ์ ์ฌ๋ฉด์ด ๋ฒฝ์ผ๋ก ์ธ์ฌ ์์ด ๋ค์ด๊ฐ ์ ์๋ค. ์๋ก ๋ถ์ด ์๋ ๋ ๊ฐ์ ํฐ ๋ฐฉ ์ฌ์ด์๋ ๋ฌธ์ด ์์ด์ ์ง๋๋ค๋ ์ ์๋ค. ์์ค ๋งจ ์ผ์ชฝ ๋ฐฉ์ ์์๋ฐฉ์ผ๋ก์ ํญ์ ํฐ ๋ฐฉ์ด๊ณ , ์๋ซ์ค ๋งจ ์ค๋ฅธ์ชฝ ๋ฐฉ์ ๋๋ฐฉ์ผ๋ก์ ์ญ์ ํฐ ๋ฐฉ์ด๋ค.
์์๋ฐฉ์์ ์ถ๋ฐํ์ฌ ๊ธธ์ ์ฐพ์์ ๋๋ฐฉ์ผ๋ก ๊ฐ๋ ๊ฒ์ด ๋ชฉ์ ์ธ๋ฐ, ์๋ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ์๋ ์์๋ฐฉ์์ ๋ ๋ฐฉ์ผ๋ก ๊ฐ ์๊ฐ ์๋ค. ๋ถ๋์ด ๊ฒ์ ๋ฐฉ ๋ช ๊ฐ๋ฅผ ํฐ ๋ฐฉ์ผ๋ก ๋ฐ๊พธ์ด์ผ ํ๋๋ฐ ๋๋๋ก ์ ์ ์์ ๋ฐฉ์ ์์ ๋ฐ๊พธ๊ณ ์ถ๋ค.
์๋ ๊ทธ๋ฆผ์ n=8์ธ ๊ฒฝ์ฐ์ ํ ์์ด๋ค.
์ ๊ทธ๋ฆผ์์๋ ๋ ๊ฐ์ ๊ฒ์ ๋ฐฉ(์๋ฅผ ๋ค์ด (4,4)์ ๋ฐฉ๊ณผ (7,8)์ ๋ฐฉ)์ ํฐ ๋ฐฉ์ผ๋ก ๋ฐ๊พธ๋ฉด, ์์๋ฐฉ์์ ๋๋ฐฉ์ผ๋ก ๊ฐ ์ ์์ง๋ง, ์ด๋ ๊ฒ์ ๋ฐฉ ํ๋๋ง์ ํฐ ๋ฐฉ์ผ๋ก ๋ฐ๊พธ์ด์๋ ๋ถ๊ฐ๋ฅํ๋ค. ๊ฒ์ ๋ฐฉ์์ ํฐ ๋ฐฉ์ผ๋ก ๋ฐ๊พธ์ด์ผ ํ ์ต์์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋จ, ๊ฒ์ ๋ฐฉ์ ํ๋๋ ํฐ๋ฐฉ์ผ๋ก ๋ฐ๊พธ์ง ์์๋ ๋๋ ๊ฒฝ์ฐ๋ 0์ด ๋ต์ด๋ค.
์ ๋ ฅ
์ฒซ ์ค์๋ ํ ์ค์ ๋ค์ด๊ฐ๋ ๋ฐฉ์ ์ n(1 ≤ n ≤ 50)์ด ์ฃผ์ด์ง๊ณ , ๋ค์ n๊ฐ์ ์ค์ ๊ฐ ์ค๋ง๋ค 0๊ณผ 1์ด ์ด๋ฃจ์ด์ง ๊ธธ์ด๊ฐ n์ธ ์์ด์ด ์ฃผ์ด์ง๋ค. 0์ ๊ฒ์ ๋ฐฉ, 1์ ํฐ ๋ฐฉ์ ๋ํ๋ธ๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ํฐ ๋ฐฉ์ผ๋ก ๋ฐ๊พธ์ด์ผ ํ ์ต์์ ๊ฒ์ ๋ฐฉ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
BFS๋ก ํ๋ฉด ๋๋คโผ๏ธ
๊ธฐ์กด์ BFS์์๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ์ง๋ง, ์ฌ๊ธฐ์๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์
์ง๋์จ ๊ฒ์ ์นธ์ ๊ฐฏ์ ์ค ์ต์ ๊ฐ์ ์ ์ฅํ๋ฉด ๋์๋ฐ๐คทโ๏ธ
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
public class Main_BOJ_2665_๋ฏธ๋ก๋ง๋ค๊ธฐ {
public static class node{
int x;
int y;
node(int x, int y){
this.x = x;
this.y = y;
}
}
static int N;
static char[][] maze;
static int[][] isVisted;
static Queue<node> queue;
static int[] dx = {-1, 0, 0, 1};
static int[] dy = {0, -1, 1, 0};
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
queue = new LinkedList<>();
maze = new char[N][N];
isVisted = new int[N][N];
for(int i = 0 ; i < N ; i++){
maze[i] = br.readLine().toCharArray();
Arrays.fill(isVisted[i], Integer.MAX_VALUE);
}
queue.offer(new node(0,0));
isVisted[0][0] = 0;
BFS();
System.out.println(isVisted[N-1][N-1]);
}
private static void BFS() {
while(!queue.isEmpty()){
node now = queue.poll();
for(int i = 0 ; i < 4; i++){
int nx = now.x + dx[i];
int ny = now.y + dy[i];
if(nx < 0 || N <= nx || ny < 0 || N <= ny)
continue;
// ํฐ ๋ฐฉ
if(maze[nx][ny] == '1'){
if(isVisted[nx][ny] > isVisted[now.x][now.y]){
isVisted[nx][ny] = isVisted[now.x][now.y];
queue.offer(new node(nx, ny));
}
}
// ๊ฒ์ ๋ฐฉ
else{
if(isVisted[nx][ny] > isVisted[now.x][now.y] + 1){
isVisted[nx][ny] = isVisted[now.x][now.y] + 1;
queue.offer(new node(nx, ny));
}
}
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ๋ฐฑ์ค / BOJ 2812 ] ํฌ๊ฒ ๋ง๋ค๊ธฐ ( JAVA / ์๋ฐ ) (0) | 2021.10.07 |
---|---|
[ ๋ฐฑ์ค / BOJ 2758 ] ๋ก๋ ( JAVA / ์๋ฐ ) (0) | 2021.10.04 |
[ ๋ฐฑ์ค / BOJ 1535 ] ์๋ ( JAVA / ์๋ฐ ) (0) | 2021.10.03 |
[ ๋ฐฑ์ค / BOJ 1302 ] ๋ฒ ์คํธ์ ๋ฌ ( JAVA / ์๋ฐ ) (0) | 2021.10.03 |
[ ๋ฐฑ์ค / BOJ 1541 ] ์์ด๋ฒ๋ฆฐ ๊ดํธ ( JAVA / ์๋ฐ ) (0) | 2021.10.02 |