728x90
문제
link: https://www.acmicpc.net/problem/2178
미로가 주어질 때, (1, 1)에서 출발해서 (N, M)에 도달할 때까지 거치는 칸의 최솟값을 구하는 문제이다.
1로는 이동할 수 있고, 0으로는 이동할 수 없다.
접근
문제에서는 미로를 N*M 사이즈 배열로 표현하고 있는데, (1, 1)부터 (N, M)까지의 좌표가 존재한다. 0이 아닌 1부터 시작함에 유의해야 한다.
(1, 1)에서 출발해, 이동 가능한 곳만 골라 미로를 순회해 답을 구했다. BFS를 활용했다.
코드
import sys
from collections import deque
#input = sys.stdin.readline
N, M = map(int, input().split())
maps = [list(map(int, input().strip())) for __ in range(N)]
d = ((-1, 0), (1, 0), (0, -1), (0, 1))
q = deque([(0, 0, 1)])
while q:
x, y, cnt = q.popleft()
if x == N-1 and y == M-1:
print(cnt)
for dx, dy in d:
xx = x + dx
yy = y + dy
if 0 <= xx < N and 0 <= yy < M and maps[xx][yy]:
maps[xx][yy] = 0
q.append((xx, yy, cnt + 1))
cnt += 1
728x90
'코딩테스트' 카테고리의 다른 글
[백준] 11403 | 경로 찾기 [파이썬/python] (0) | 2025.04.19 |
---|---|
[백준] 14940 | 쉬운 최단거리 [파이썬/python] (0) | 2025.04.19 |
[백준] 1697 | 숨바꼭질 [파이썬/python] (0) | 2025.04.18 |
[백준] 1389 | 케빈 베이컨의 6단계 법칙 [파이썬/python] (0) | 2025.04.18 |
[백준] 21739 | 헌내기는 친구가 필요해 [파이썬/python (0) | 2025.04.18 |