🐹 게임 맵 최단거리
1. 문제 링크
2. 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from collections import deque
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
INF = int(1e9)
def solution(maps):
n = len(maps)
m = len(maps[0])
distance = [[INF] * m for _ in range(n)]
distance[0][0] = 1
q = deque([])
q.append((0, 0))
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m and maps[nx][ny] == 1:
if distance[nx][ny] > distance[x][y] + 1:
distance[nx][ny] = distance[x][y] + 1
q.append((nx, ny))
if distance[n-1][m-1] == INF:
return -1
return distance[n-1][m-1]
정확성 테스트
테스트 1 〉 통과 (0.04ms, 10.2MB) 테스트 2 〉 통과 (0.03ms, 10.4MB) 테스트 3 〉 통과 (0.06ms, 10.2MB) 테스트 4 〉 통과 (0.04ms, 10.2MB) 테스트 5 〉 통과 (0.04ms, 10.2MB) 테스트 6 〉 통과 (0.06ms, 10.4MB) 테스트 7 〉 통과 (0.11ms, 10.4MB) 테스트 8 〉 통과 (0.05ms, 10.2MB) 테스트 9 〉 통과 (0.07ms, 10.2MB) 테스트 10 〉 통과 (0.10ms, 10.2MB) 테스트 11 〉 통과 (0.04ms, 10.3MB) 테스트 12 〉 통과 (0.03ms, 10.2MB) 테스트 13 〉 통과 (0.09ms, 10.2MB) 테스트 14 〉 통과 (0.08ms, 10.2MB) 테스트 15 〉 통과 (0.06ms, 10.2MB) 테스트 16 〉 통과 (0.02ms, 10.2MB) 테스트 17 〉 통과 (0.06ms, 10.4MB) 테스트 18 〉 통과 (0.02ms, 10.2MB) 테스트 19 〉 통과 (0.01ms, 10.4MB) 테스트 20 〉 통과 (0.01ms, 10.3MB) 테스트 21 〉 통과 (0.01ms, 10.2MB) 효율성 테스트
테스트 1 〉 통과 (15.05ms, 10.3MB) 테스트 2 〉 통과 (7.80ms, 10.3MB) 테스트 3 〉 통과 (9.49ms, 10.5MB) 테스트 4 〉 통과 (12.80ms, 10.4MB)
3. 해설
최단 거리를 구하기 위해 bfs 알고리즘을 사용한다.
각 위치의 최단거리를 나타내는 이차원 배열 distance를 무한대 값으로 초기화해주고 현재 위치(0, 0)만 1로 초기화해준다.
bfs를 돌며 map 안의 범위이면서 map이 1일 때 최단 거리를 갱신해준다. 최단 거리는 이전 위치 + 1의 값이다.
도착 위치의 최단거리 값 distance[n-1][m-1]이 구하고자 하는 최단 거리이다. 이때 해당 값이 초기값(무한대)이면 해당 위치에 도달하지 못한 것이므로 -1을 리턴한다.
This post is licensed under CC BY 4.0 by the author.