Problem
Code
ย #1
Idea
bfs ๋ก ํ์์ ํ๋๋ฐ ํ์ (x์ขํ, y์ขํ, ๋์ ๋น์ฉ, ๋ฐฉํฅ) ์ ์ ์ฅํ๋ฉฐ ํ์์ ํ๋ค.
1.
์ง์ /์ฝ๋ ํ๋จ
ํ์ pop ํ ๋ฐฉํฅ ๊ฐ๊ณผ ๊ฐ์ผ๋ฉด ์ง์ ์ด๊ณ , ๋ค๋ฅด๋ฉด ์ฝ๋๋ค.
2.
์ต์๋น์ฉ
ํ์ ๋์ ๋น์ฉ์ ๋ด์์ผ๋ก์จ ๋ฐฉ๋ฌธํ ๋
ธ๋์ ์ต์๋น์ฉ์ ๊ฐฑ์ ํด์ค๋ค.
ย Code
from collections import deque
def solution(board):
dx = [-1,0,1,0]
dy = [0,1,0,-1]
n = len(board)
MAX = int(1e9)
def bfs(start):
visited = [[MAX]*n for _ in range(n)]
visited[0][0] = 0
q = deque([start]) # x, y, cost, direction
while q:
x, y, c, d = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < n and board[nx][ny] == 0:
# dp
if i == d: # ๋ฐฉํฅ ๊ทธ๋๋ก์ด๋ฉด ์ง์ ๊ธ์ก ๊ณ์ฐ
nc = c + 100
else: # ๋ฐฉํฅ ๋ฌ๋ผ์ง๋ฉด ์ฝ๋ ๊ธ์ก ๊ณ์ฐ
nc = c + 600
# new cost ๊ฐ ์์ ๋๋ง ๊ฐฑ์ ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ, ํ append
if nc < visited[nx][ny]:
visited[nx][ny] = nc
q.append([nx, ny, nc, i])
return visited[n-1][n-1]
return min([bfs((0, 0, 0, 1)), bfs((0, 0, 0, 2))])
Python
๋ณต์ฌ
Solution
Commentary
#2
Idea
ย Code
Python
๋ณต์ฌ