경우의 수 따라 진입 하면 된다.
주의할 점은 for 문 순회기 때문에 key를 0으로 바꿔 넣으면 다시 1로 바꿔주어야 한다는 것.
분기 문제일때 변수를 직접 바꾸는 것은 주의하자.
import sys
input = sys.stdin.readline
from collections import deque
def bfs():
queue = deque()
queue.append([s_x-1,s_y-1,0,1])
visited = [[[False for _ in range(M)] for _ in range(N)] for _ in range(2)]
visited[1][s_x-1][s_y-1] = True
while queue:
x,y,time,key = queue.popleft()
if x==t_x-1 and y==t_y-1:
return time
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if 0<=nx<N and 0<=ny<M:
if key:
if not maze[nx][ny]:
if not visited[1][nx][ny]:
visited[1][nx][ny] = True
queue.append([nx,ny,time+1,key])
elif maze[nx][ny]:
if not visited[0][nx][ny]:
visited[0][nx][ny] = True
key = 0
queue.append([nx,ny,time+1,key])
key = 1
elif not key:
if not visited[0][nx][ny]:
if not maze[nx][ny]:
visited[0][nx][ny] = True
queue.append([nx,ny,time+1,key])
return -1
N, M = map(int, input().split())
s_x,s_y = map(int, input().split())
t_x,t_y = map(int, input().split())
maze = [list(map(int, input().split())) for _ in range(N)]
dx = [0,0,1,-1]
dy = [1,-1,0,0]
print(bfs())
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 15724 주지수 (0) | 2021.08.29 |
---|---|
[백준][Python] 14621 나만안되는 연애 (0) | 2021.08.29 |
[백준][Python] 13913 숨바꼭질4 (0) | 2021.08.29 |
[백준][Python] 2581 소수 (0) | 2021.08.29 |
[백준][Python] 2564 경비원 (0) | 2021.08.29 |