Contents
내가 작성한 코드


내가 작성한 코드
import java.util.*;
class Solution {
public int solution(int[][] maps) {
int n = maps.length; // 맵의 행 길이 (세로 크기)
int m = maps[0].length; // 맵의 열 길이 (가로 크기)
// 방문 여부와 최단 거리를 기록할 배열
int[][] visited = new int[n][m];
// 방향 벡터: 상(-1,0), 하(1,0), 좌(0,-1), 우(0,1)
int[] dx = { -1, 1, 0, 0 };
int[] dy = { 0, 0, -1, 1 };
// BFS에 사용할 큐. 시작 좌표 (0, 0)를 먼저 넣음
Queue<int[]> queue = new LinkedList<>();
queue.offer(new int[] { 0, 0 });
// 시작 위치는 방문했고, 거리 1로 설정
visited[0][0] = 1;
// 큐가 빌 때까지 반복 (BFS 탐색)
while (!queue.isEmpty()) {
int[] now = queue.poll(); // 현재 위치 꺼냄
int x = now[0]; // 현재 x좌표
int y = now[1]; // 현재 y좌표
// 4방향 탐색
for (int dir = 0; dir < 4; dir++) {
int nx = x + dx[dir]; // 이동 후 x좌표
int ny = y + dy[dir]; // 이동 후 y좌표
// 맵 범위를 벗어났으면 continue
if (nx < 0 || ny < 0 || nx >= n || ny >= m)
continue;
// 벽이거나 이미 방문한 곳이면 continue
if (maps[nx][ny] == 0 || visited[nx][ny] > 0)
continue;
// 방문 가능한 길이면, 이전 거리 + 1 저장
visited[nx][ny] = visited[x][y] + 1;
// 큐에 다음 위치 추가
queue.offer(new int[] { nx, ny });
}
}
// 도착지점까지 도달 못했으면 0일 것 → -1 반환
// 도달했다면 거리 값을 반환
return visited[n - 1][m - 1] == 0 ? -1 : visited[n - 1][m - 1];
}
}
Share article