๋ฐ์ํ
๐ ๋ฌธ์
๐ก ํ์ด
BFS(๋๋น ์ฐ์ ํ์) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋งต์ ํต๊ณผ ๊ฐ๋ฅํ ๋ฐฉ์๋ค์ ํ์ํ๊ณ , ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์ answer ๋ณ์์ ์ ์ฅํ ํ ๋ฐํํฉ๋๋ค.
import java.util.*;
class Solution {
public int solution(int[][] maps) {
int answer = 0;
int n = maps.length;
int m = maps[0].length;
// ์ด๋ ๊ฐ๋ฅํ ๋ฐฉํฅ (์,ํ,์ฐ,์ข)
int[][] directions = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
Queue<int[]> queue = new LinkedList<>();
queue.offer(new int[]{0, 0, 1}); // ์์ ์์น (0, 0)์์ ์ถ๋ฐํ๋ฏ๋ก ํ์ ์ถ๊ฐ
while (!queue.isEmpty()) {
int[] currentPosition = queue.poll();
int x = currentPosition[0];
int y = currentPosition[1];
int distance = currentPosition[2];
// ๋ชฉ์ ์ง์ ๋๋ฌํ๋ฉด ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐํํ ์ข
๋ฃ
// ๋์ฐฉ ๊ฐ๋ฅํ ์ฌ๋ฌ ๋ฐฉ์์ด ์๋๋ผ๋, ์ต๋จ ๊ฑฐ๋ฆฌ ๋ฐฉ์์ด ์ ์ผ ๋จผ์ ๋์ฐฉ
if (x == n - 1 && y == m - 1) {
answer = distance;
break;
}
for (int[] dir : directions) {
int newX = x + dir[0];
int newY = y + dir[1];
// ์ด๋ ๊ฐ๋ฅํ ์์น์ด๋ฉด ํ์ ์ถ๊ฐํ๊ณ ํด๋น ์์น๋ฅผ ๋ฒฝ์ผ๋ก ํ์ (๋ฐฉ๋ฌธ ์ฒ๋ฆฌ)
if (newX >= 0 && newX < n &&
newY >= 0 && newY < m &&
maps[newX][newY] == 1) {
queue.offer(new int[]{newX, newY, distance + 1});
maps[newX][newY] = 0;
}
}
}
if (answer == 0) {
// ๋ชฉ์ ์ง์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ -1 ๋ฐํ
return -1;
}
return answer;
}
}