[JAVA 문제 풀이] 327. 게임 맵 최단 거리

프로그래머스 (1844)
Stupefyee's avatar
Jun 18, 2025
[JAVA 문제 풀이] 327. 게임 맵 최단 거리
notion image
notion image
notion image
 

내가 작성한 코드

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

stupefyee