BOJ_G4_1261
๐ [G4_1261] ์๊ณ ์คํ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
static int N, M, min, cnt;
static int[][] map;
static int[][] v;
static int[] dx = { 0, 0, 1, -1 };
static int[] dy = { 1, -1, 0, 0 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
// ๊ฐ๋กํฌ๊ธฐ
M = Integer.parseInt(st.nextToken());
// ์ธ๋ก ํฌ๊ธฐ
N = Integer.parseInt(st.nextToken());
// 1,1 ๋ถํฐ ์์ํ๋ค
map = new int[N + 1][M + 1];
// ๋์ ๋น์ฉ
v = new int[N + 1][M + 1];
// ์
๋ ฅ
for (int i = 1; i < N + 1; i++) {
String str = br.readLine();
String[] sstr = str.split("");
for (int j = 1; j < M + 1; j++) {
map[i][j] = Integer.parseInt(sstr[j-1]);
v[i][j] = Integer.MAX_VALUE;
}
}
v[1][1] = 0;
bfs(1, 1);
System.out.println(v[N][M]);
}
// bfs
static void bfs(int x, int y) {
Queue<int[]> q = new LinkedList<int[]>();
q.offer(new int[] {x,y});
while(!q.isEmpty()) {
int cur[] = q.poll();
for(int i=0; i<4; i++) {
int nx = cur[0] + dx[i];
int ny = cur[1] + dy[i];
// ๋ฒ์ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ
if(nx < 1 || ny < 1 || nx > M || ny >N ) continue;
// ๋ฒฝ์ธ ๊ฒฝ์ฐ && ๋์ ๋๋ ๋น์ฉ์ด ๋ ๋ง์ด ๋๋ ๊ฒฝ์ฐ ๊ฐฑ์
if(map[ny][nx] == 1 && v[ny][nx] > v[cur[1]][cur[0]]+1) {
v[ny][nx] = v[cur[1]][cur[0]]+1;
q.offer(new int[] {nx,ny});
}
// ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ && ๋์ ๋๋ ๋น์ฉ์ด ๋ ๋ง์ด ๋๋ ๊ฒฝ์ฐ ๊ฐฑ์ -> 1์ ๋ํ ํ์๊ฐ ์๋ค
else if(map[ny][nx] == 0 && v[ny][nx] > v[cur[1]][cur[0]]) {
v[ny][nx] = v[cur[1]][cur[0]];
q.offer(new int[] {nx,ny});
}
}
}
}
}
๐ค ๋์ ์๊ฐ
์ฒ์์ ๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ๊ฐ๋จํ ์๋ฎฌ๋ ์ด์
์ด๊ตฌ๋~ ํ๊ณ dfs๋ก ๋ฑ ํ์๋๋ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ด๋ค..
์๋ v[][] ๋ฅผ boolean์ผ๋ก ๋ฐฉ๋ฌธ์ฒดํฌ๋ก ํ๋๋ฐ ๊ทธ๊ฒ๋ณด๋ค bfs๋ฅผ ํ์ฉํ์ฌ intํ ๋ฐฐ์ด๋ก ๋์ ๋๋ ๋น์ฉ์ ์ ์ฅํด์ ๊ณ์ ๊ฐฑ์ ํด ๋๊ฐ์ผ ๊ฒ ๋ค๊ณ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ๋์ queue๋ฅผ ์ด์ฉํด bfs๋ฅผ ๊ตฌํํ๋ค.
๋ค์ ๊ณต๊ฐ์ ๋ฒฝ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ์กด ๋น์ฉ์๋ค +1 ์ ํด์ ๋ค์ ๋น์ฉ๊ณผ ๋น๊ต๋ฅผ ํด ๋ ์ ์ ๊ฒฝ์ฐ๋ฅผ ์ ํํด ์ฃผ์๊ณ
๋ค์ ๊ณต๊ฐ์ ๋ฒฝ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ์กด ๋น์ฉ ๊ทธ๋๋ก ํด์ ๋ค์ ๋น์ฉ๊ณผ ๋น๊ต๋ฅผ ํด ๋ ์ ์ ๊ฒฝ์ฐ๋ฅผ ์ ํํด ์ฃผ์๋ค.
์๊ฐ๋ณต์ก๋๋ฅผ ์ ์๊ฐํด์ผ ํ ๋ฌธ์ ์ด๋ค.