🌞Algorithm/🔥programmers

[programmers] 게임 맵 최단거리

뿌야._. 2026. 7. 13. 11:13
문제
https://school.programmers.co.kr/learn/courses/30/lessons/1844
 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


< 게임 맵 최단거리 >

 

문제 풀이 (Java)

import java.util.*;

class Solution {
	public int solution(int[][] maps) {
		int answer = -1;

		Queue<int[]> queue = new LinkedList<>();
		queue.add(new int[] { 0, 0, 1 });

		boolean visited[][] = new boolean[maps.length][maps[0].length];
		visited[0][0] = true;

		int dx[] = { -1, 1, 0, 0 };
		int dy[] = { 0, 0, -1, 1 };

		boolean flag = false;

		while (!queue.isEmpty()) {
			int info[] = queue.poll();

			for (int i = 0; i < 4; i++) {
				int x = info[0] + dx[i];
				int y = info[1] + dy[i];

				if (x >= 0 && x < maps.length && y >= 0 && y < maps[0].length && maps[x][y] == 1 && !visited[x][y]) {
					if (x == maps.length - 1 && y == maps[0].length - 1) {
						answer = info[2] + 1;
						flag = true;
						break;
					}
					visited[x][y] = true;
					queue.add(new int[] { x, y, info[2] + 1 });
				}
			}
			if (flag) {
				break;
			}
		}
		return answer;
	}
}

 

Queue에 시작 위치와 지나가야 하는 칸의 개수를 저장한 뒤 Queue가 빌 때까지 다음 과정을 반복한다.

 

1. queue poll

2. 상하좌우 탐색하며 maps 범위 안이고 벽이 없는 자리이며 아직 방문하지 않은 곳이라면 방문 표시 및 queue에 추가. 이때, 이동한 위치가 우측 하단이라면 answer 업데이트 후 종료

 

최종 answer을 반환한다. 

 



 

출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges

'🌞Algorithm > 🔥programmers' 카테고리의 다른 글

[programmers] 폰켓몬  (0) 2026.07.03
[programmers] 미로 탈출  (0) 2026.07.01
[programmers] 숫자 변환하기  (0) 2026.06.30
[programmers] 할인 행사  (0) 2026.06.29
[programmers] 롤케이크 자르기  (0) 2026.06.26