분기있는 bfs. 벽을 뿌순 횟수에 따라 분기를 나눠준다.
import sys
input = sys.stdin.readline
from collections import deque
def bfs(x,y):
queue = deque()
queue.append([x,y,0])
visited = [[[0]*(K+1) for _ in range(M)] for _ in range(N)]
visited[x][y][0] = 1
while queue:
x,y,b_cnt = queue.popleft()
if x==N-1 and y==M-1:
return visited[x][y][b_cnt]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<N and 0<=ny<M:
if not visited[nx][ny][b_cnt]:
if maps[nx][ny] and b_cnt < K:
visited[nx][ny][b_cnt+1] = visited[x][y][b_cnt]+1
queue.append([nx,ny,b_cnt+1])
elif not maps[nx][ny]:
visited[nx][ny][b_cnt] = visited[x][y][b_cnt]+1
queue.append([nx,ny,b_cnt])
return -1
N, M, K = map(int, input().split())
maps = [list(map(int, list(input().rstrip()))) for _ in range(N)]
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
print(bfs(0,0))
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 18234 당근훔쳐먹기 (0) | 2021.08.31 |
---|---|
[백준][Python] 18352 특정거리의 도시찾기 (0) | 2021.08.31 |
[백준][Python] 14938 서강그라운드 (0) | 2021.08.30 |
[백준][Python] 15886 내 선물을 받아줘 2 (0) | 2021.08.30 |
[백준][Python] 13418 학교탐방가기 (0) | 2021.08.29 |