# BFS
from collections import deque
import heapq
def solution(board):
INF = 1e8
dx = [0,1,0,-1]
dy = [1,0,-1,0]
N = len(board)
visited = [[[INF for _ in range(4)] for _ in range(N)] for _ in range(N)]
q = []
heapq.heappush(q, [0, 0, 0, -1])
while q:
cost, x, y, direction = heapq.heappop(q)
if x == N-1 and y == N-1:
return cost
for k in range(4):
if direction != -1 and (direction + 2) % 4 == k:
continue
new_x = x + dx[k]
new_y = y + dy[k]
new_cost = cost
if direction == k or direction == -1:
new_cost += 100
else:
new_cost += 600
if new_x < 0 or new_x >= N or new_y < 0 or new_y >= N or board[new_x][new_y] == 1 or visited[new_x][new_y][k] < new_cost:
continue
else:
visited[new_x][new_y][k] = new_cost
heapq.heappush(q, [new_cost, new_x, new_y, k])
없음
방향 고려 안함 TC 14번 실패
처음엔 visited 를 boolean 값으로 진행했었음. 14번이 실패하는 것을 보고 방향을 도입
우선 순위 큐 안 씀 TC 11번 실패
그냥 큐로 구현했을 때 시간 초과가 나서 우선순위 큐를 써서 최적화 함