# 미로 탐색
import sys
from collections import deque
input = sys.stdin.readline
def go(x, y):
q = deque()
q.append((x, y))
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx <= -1 or nx >= N or ny <= -1 or ny >= M:
continue
if arr[nx][ny] == 0:
continue
elif arr[nx][ny] == 1:
q.append((nx, ny))
arr[nx][ny] = arr[x][y] + 1
N, M = map(int, input().split())
arr = []
for i in range(N):
arr.append(list(map(int, input().strip())))
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
go(0, 0)
print(arr[N-1][M-1])
BFS
1. 시작지점을 q에 append하고 시작
2. q가 빌 때까지 현재위치의 좌,우,위,아래 4방향 확인
- 해당 위치의 값이 0이면(이동불가), continue
- 해당 위치의 값이 1이면(이동가능), q에 그 위치(x,y)를 append하고 1증가
3. arr[N-1][M-1] 출력 (도착위치로 이동할 수 있을 경우만 입력으로 주어짐)
(1,1)에서 시작하는 것을 (0,0)으로 생각하고 마지막에 출력할 때 -1씩 해주었다.
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 17142번 - 연구소 3 (파이썬) (0) | 2022.01.20 |
---|---|
[백준] 4485번 - 녹색 옷 입은 애가 젤다지? (파이썬) (0) | 2022.01.20 |
[백준] 1325번 - 효율적인 해킹 (파이썬) (1) | 2022.01.20 |
[백분] 13913번 - 숨바꼭질 3 (파이썬) (0) | 2022.01.20 |
[백준] 1806번 - 부분합 (파이썬) (0) | 2022.01.20 |