백준 문제 링크
미로 탐색
- BFS 방식을 사용했다
- 좌표와 distance를 popleft 하면서, 이동할 수 있는 방향이라면
방금 전 좌표가 가진 distance에 +1을 한 값을 distance로 저장한다.- (1,1)에서 출발해 (N-1,M-1)에 도착하면 distance를 반환한다.
N,M = map(int, input().split())
lst = [[0] * M for _ in range(N)]
for i in range(N):
x = input()
for j in range(len(x)):
lst[i][j] = int(x[j])
from collections import deque
start_x, start_y = 0,0
end_x, end_y = N-1, M-1
dx = [0,0,1,-1]
dy = [1,-1,0,0]
queue = deque()
queue.append((start_x, start_y,1))
visited = set()
visited.add((start_x, start_y))
while queue:
x,y,distance = queue.popleft()
if (x,y) == (end_x, end_y):
answer = distance
break
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if (0<=nx<N) and (0<=ny<M) and (lst[nx][ny] == 1) and ((nx,ny) not in visited):
queue.append((nx,ny,distance + 1))
visited.add((nx,ny))
print(answer)
프로그래머스에서 똑같은 문제를 풀어봐서 좀 수월했다.