

문제 풀이
전형적인 BFS를 활용한 미로 탈출 문제입니다.
이런 미로 문제는 델타와 deque를 사용해서 popleft를 하며 이미 지나온 길은 지나치고 새로운 길만 찾아가면 됩니다
n, m은 미로의 크기지만 사람 기준으로 5X5라고 되어 있기에 n-1, m-1이라고 생각
visited 배열을 새로 만들어서 이미 지나온 길인지 확인
리스트에서 계속 뽑아오며 델타를 활용해 갈 수 있는 길을 deque에 cnt(몇 번 움직였는지) 정보와 함께 넣어줌
만약 y == n-1, x == m-1 인 경우 cnt를 바로 반환(BFS에서는 가장 먼저 도착하는 경우가 제일 짧은 경로임)
심화 - 만약 가중치가 있는 맵인 경우에는 모든 도착 경우의 수를 따져봐야 하지만 해당 문제는 무조건 1이라 스킵
from collections import deque
def solution(maps):
n, m = len(maps[0]), len(maps)
visited = [[False] * n for _ in range(m)]
visited[0][0] = True
delta = [(1, 0), (-1, 0), (0, 1), (0, -1)]
q = deque([])
q.append((1, 0, 0))
while q:
cnt, y, x = q.popleft()
if x == n-1 and y == m-1:
return cnt
for dy, dx in delta:
nx = x + dx
ny = y + dy
if 0 <= nx < n and 0 <= ny < m and visited[ny][nx] == False and maps[ny][nx] == 1:
q.append((cnt+1, ny, nx))
visited[ny][nx] = True
return -1
반응형
'프로그래머스 - Python > 알고리즘 고득점 Kit' 카테고리의 다른 글
| 알고리즘 고득점 Kit - 여행경로(DFS) (2) | 2025.07.10 |
|---|---|
| 알고리즘 고득점 Kit - DFS/BFS - 단어 변환 (0) | 2025.06.17 |
| 알고리즘 고득점 Kit - dfs/bfs - 타겟 넘버 (0) | 2025.06.14 |
| 알고리즘 고득점 Kit - 완전탐색 - 모의고사 (0) | 2025.06.11 |
| 알고리즘 고득점 Kit - 완전탐색 - 최소직사각형 (0) | 2025.06.11 |