Skip to content

Commit 3dedf33

Browse files
committed
[PGS] 블록 이동하기 / lv3 / 60분 실패
https://school.programmers.co.kr/learn/courses/30/lessons/60063
1 parent 25af2f2 commit 3dedf33

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from collections import deque
2+
3+
dx = [1, 0, -1, 0]
4+
dy = [0, 1, 0, -1]
5+
6+
MAX = float('inf')
7+
8+
9+
def solution(board):
10+
N = len(board)
11+
answer = 0
12+
visited = set()
13+
q = deque([(0, 0, 0, 0)])
14+
15+
while q:
16+
x, y, r, t = q.popleft()
17+
if (x, y) == (N - 1, N - 1) or (x + dx[r], y + dy[r]) == (N - 1, N - 1):
18+
answer = t
19+
break
20+
if (x, y, r) in visited or (x + dx[r], y + dy[r], (r + 2) % 4) in visited:
21+
continue
22+
visited.add((x, y, r))
23+
24+
for i in range(4):
25+
ax, ay = x + dx[i], y + dy[i]
26+
if not -1 < ax < N or not -1 < ay < N or board[ay][ax] == 1:
27+
continue
28+
_ax, _ay = ax + dx[r], ay + dy[r]
29+
if not -1 < _ax < N or not -1 < _ay < N or board[_ay][_ax] == 1:
30+
continue
31+
q.append((ax, ay, r, t + 1))
32+
33+
for i in [-1, 1]:
34+
_r = (r + i) % 4
35+
ax, ay = x + dx[_r], y + dy[_r]
36+
if not -1 < ax < N or not -1 < ay < N or board[ay][ax] == 1:
37+
continue
38+
cx, cy = ax + dx[r], ay + dy[r]
39+
if board[cy][cx] == 1:
40+
continue
41+
q.append((x, y, _r, t + 1))
42+
43+
x, y, r = x + dx[r], y + dy[r], (r + 2) % 4
44+
for i in [-1, 1]:
45+
_r = (r + i) % 4
46+
ax, ay = x + dx[_r], y + dy[_r]
47+
if not -1 < ax < N or not -1 < ay < N or board[ay][ax] == 1:
48+
continue
49+
cx, cy = ax + dx[r], ay + dy[r]
50+
if board[cy][cx] == 1:
51+
continue
52+
q.append((x, y, _r, t + 1))
53+
54+
return answer

0 commit comments

Comments
 (0)