문제
코딩테스트 연습 - 게임 맵 최단거리
[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1
programmers.co.kr
풀이
bfs를 사용해서 최단 거리를 구하고, visit을 확인하면서 갔던 경로는 가지 않도록 함
코드
from collections import deque
d = [(-1, 0), (1, 0), (0, -1), (0, 1)]
def solution(maps):
n, m = len(maps) - 1, len(maps[0]) - 1
Q = deque([(0, 0, 1)])
visit = set([(0, 0)])
while Q:
r, c, dis = Q.popleft()
for i in range(4):
nr, nc = r + d[i][0], c + d[i][1]
if 0 <= nr <= n and 0 <= nc <= m and maps[nr][nc] == 1:
if nr == n and nc == m:
return dis + 1
if (nr, nc) in visit:
continue
visit.add((nr, nc))
Q.append((nr, nc, dis + 1))
return -1
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv1. 같은 숫자는 싫어 | Java | Python (0) | 2023.01.03 |
---|---|
[Programmers] Lv1. 성격 유형 검사하기 | Java | Python (0) | 2022.10.27 |
[Programmers] Lv2. [1차] 뉴스 클러스터링 (0) | 2021.05.24 |
[Programmers] Lv2. 문자열 압축 (0) | 2021.05.24 |
[Programmers] Lv2. 더 맵게 (0) | 2021.05.24 |
댓글