문제를 보고 처음에 아주 신이 났었다.
딱히 생각하지 않고 바로 풀 수 있는 BFS문제였기 때문이다.
문제를 제대로 읽지 않고 10분도 안돼서 코드 작성을 마쳤고 테스트를 돌리는데
몇 개의 케이스를 제외하고서 모두 틀렸고 심지어 런타임 에러도 났다.
30분 넘게 고민을 해도 답이 나오지 않았고
1시간이 다 돼서야 n과 m의 크기가 가변적이라는 걸 발견했다.
문제 예시에서 5X5 배열만을 이야기해서 모든 변수를 5로 고정하고 풀었으니 당연히 틀릴만했던 거다.
저번에도 이런 경우가 꽤 있었는데 오늘은 정말 허탈했다....
문제를 제대로 읽자....
최종 코드
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
static boolean[][] visited;
static int[] dx = {0, 0, 1, -1};
static int[] dy = {1, -1, 0, 0};
static int n, m;
public int solution(int[][] maps) {
int answer = 0;
n = maps.length;
m = maps[0].length;
visited = new boolean[n][m];
answer = bfs(0, 0, maps);
return answer;
}
static int bfs(int x, int y, int[][] maps) {
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[]{x, y});
visited[x][y] = true;
while (!queue.isEmpty()) {
int[] temp = queue.poll();
for (int i = 0; i < 4; i++) {
int nx = temp[0] + dx[i];
int ny = temp[1] + dy[i];
if (nx < 0 || ny < 0 || nx >= n || ny >= m) {
continue;
}
if (!visited[nx][ny] && maps[nx][ny] == 1) {
visited[nx][ny] = true;
queue.add(new int[]{nx, ny});
maps[nx][ny] = maps[temp[0]][temp[1]] + 1;
}
}
}
if(visited[n-1][m-1]) {
return maps[n-1][m-1];
} else {
return -1;
}
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 백준 15686 - 치킨 배달 (0) | 2022.07.15 |
---|---|
(Java) 프로그래머스 - 멀쩡한 사각형 (0) | 2022.07.14 |
(Java) 백준 12865 - 평범한 배낭 (0) | 2022.07.12 |
(Java) 백준 1932 - 정수 삼각형 (0) | 2022.07.11 |
(Java) 프로그래머스 거리두기 확인하기 (0) | 2022.07.09 |