
-
문제 정보
- 0은 비어 있음 / 1은 채워있음
- 출발 지점 : (0,0) / 도착 지점 (N-1,N-1)
- 벽이 있는 곳은 건설 할 수 없다.
- 경주로의 출발점은 (0, 0) 칸, 도착점은 (N-1, N-1) 칸
- 도착점은 (N-1, N-1) 칸을 연결하여 건설할 수 있다.
-
입력
- 도면의 상태(0은 비어 있음, 1은 벽)을 나타내는 2차원 배열 board
-
출력
- 경주로를 건설하는데 필요한 최소 비용을 return
-
코드
from collections import deque
def solution(matrix):
N, M = len(matrix), len(matrix)
dx = [0, -1, 0, 1]
dy = [-1, 0, 1, 0]
def iswall(nx, ny):
if nx < 0 or ny < 0:
return False
if nx >= N or ny >= M:
return False
if matrix[nx][ny] == 1:
return False
return True
def bfs(start):
queue = deque([start])
matrix[0][0]= 1
min_money = [[100000000] * N for _ in range(M)]
min_money[0][0] = 0
while queue:
x,y,cost,head = queue.popleft()
for i in range(4):
nx, ny=x+dx[i], y+dy[i]
if iswall(nx,ny) :
if head != i:
n_cost = cost+ 600
else :
n_cost = cost + 100
if n_cost < min_money[nx][ny]:
min_money[nx][ny] = n_cost
queue.append([nx, ny, n_cost, i])
return min_money[-1][-1]
return min(bfs((0,0,0,2)),bfs((0,0,0,3)))
matrix = [[0,0,0],[0,0,0],[0,0,0]]
print(solution(matrix))