코딩테스트 연습 - 게임 맵 최단거리 | 프로그래머스 스쿨 (programmers.co.kr)
나의 풀이
.
모범 답안
from collections import deque
def solution(maps):
n = len(maps); m = len(maps[0])
visited = [[False] * m for _ in range(n)]
q = deque()
q.append((0, 0))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
visited[0][0]=True
while q:
y, x = q.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<m and 0<=ny<n and maps[ny][nx] == 1: # 맵을 벗어나지 않고 벽이 아니라면
if not visited[ny][nx]: # 방문하지 않았다면
visited[ny][nx] = True
q.append((ny, nx))
maps[ny][nx] = maps[y][x]+1
if maps[n-1][m-1]==1:
return -1
else:
return maps[n-1][m-1]
알게된 점
재귀 함수를 호출하여 스택을 사용하는 DFS의 구조상 모든 경로를 다 탐색해봐야 한다.
따라서, 큐를 사용하는 BFS에 비하여 시간이 오래 걸리기 때문에 최단 경로를 탐색할 때에는 BFS를 사용하는 것이 효율적이다.
'코딩테스트 > programmers (python)' 카테고리의 다른 글
Programmers / 3단계 / [DFS/BFS] 네트워크 / python (0) | 2024.02.19 |
---|---|
Programmers / 2단계 / [힙(Heap)] 더 맵게 / python / (1) | 2024.02.18 |
Programmers / 2단계 / k진수에서 소수 개수 구하기 / python / 2018 KAKAO BLIND RECRUITMENT (0) | 2024.02.17 |
Programmers / 2단계 / [1차] 뉴스 클러스터링 / python / 2018 KAKAO BLIND RECRUITMENT (1) | 2024.02.17 |
Programmers / 2단계 / 튜플 / python / 2019 카카오 개발자 겨울 인턴십 (0) | 2024.02.16 |