|
์ฝ๋ ์์ฑํ๊ธฐ
import java.util.LinkedList;
import java.util.Queue;
class Solution {
// ์, ํ, ์ข, ์ฐ ์ด๋
static int[] x = {0, 0, 1, -1};
static int[] y = {-1, 1, 0, 0};
// ์ฌ๋ฐฉ๋ฌธ ๋ฐฉ์ง
boolean[][] visited;
public int solution(int[][] maps) {
// ์ฌ๋ฐฉ๋ฌธ ๋ฐฉ์ง ์ด๊ธฐํ
visited = new boolean[maps.length][maps[0].length];
return bfs(maps);
}
private int bfs(int[][] maps) {
Queue<int[]> queue = new LinkedList<>();
// ํ์ ์์์ ์ ๋ฃ๋๋ค.
queue.add(new int[]{0, 0});
// ์์์ ๋ฐฉ๋ฌธ ์๋ฃ
visited[0][0] = true;
// ํ๊ฐ ๋น์์ง๋๊น์ง ๋ฐ๋ณต
while (!queue.isEmpty()) {
// ํ์์ ๊ฐ์ ๋นผ์ ์์ ํด๋์ ๋ฃ๋๋ค.
int[] temp = queue.poll();
// 4๋ฒ, 4๋ฐฉํฅ ๋ฐ๋ณต
for (int i = 0; i < 4; i++) {
int nx = temp[0] + x[i];
int ny = temp[1] + y[i];
// ์ง๋์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ์ ๋ ์๋ต
if (nx < 0 || ny < 0 || nx >= maps.length || ny >= maps[0].length) {
continue;
}
// ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด์, ํด๋น ์ง๋์ ์ซ์๊ฐ 1์ธ ๊ฒฝ์ฐ ๋ฐฉ๋ฌธํด์ผ ํ๋ฏ๋ก true
if (!visited[nx][ny] && maps[nx][ny] == 1) {
// ๋ฐฉ๋ฌธ ํ๋ ์๊ฐ true
visited[nx][ny] = true;
// ๋ฐฉ๋ฌธํ์์ผ๋ฏ๋ก ํด๋น ์ขํ๋ฅผ ํ์ ๋ฃ๋๋ค.
queue.add(new int[]{nx, ny});
// ๊ธฐ์ค ์๋ฆฌ์ ๊ฐ + 1 (๊ฑฐ๋ฆฌ๊ฐ ์ฆ๊ฐ)
maps[nx][ny] = maps[temp[0]][temp[1]] + 1;
}
}
}
// ์ง๋์ ๋์ ๋์ฐฉํ์์ผ๋ฉด, ๋์ฐฉ์ ์ ๊ฐ์ ๋ฐํํ๋ค.
if (visited[maps.length - 1][maps[0].length - 1]) {
return maps[maps.length - 1][maps[0].length - 1];
} else {
// ์ง๋์ ๋์ ๋๋ฌํ์ง ๋ชปํ์ผ๋ฉด -1 ๋ฐํ
return -1;
}
}
public static void main(String[] args) {
int[][] maps = {
{1, 0, 1, 1, 1},
{1, 0, 1, 0, 1},
{1, 0, 1, 1, 1},
{1, 1, 1, 0, 1},
{0, 0, 0, 0, 1}
};
Solution s = new Solution();
System.out.println(s.solution(maps));
}
}
Java
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ