๐น ๋ฏธ๋ก ํ์ถ ๋ช ๋ ์ด
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
dx = [1, 0, 0, -1]
dy = [0, -1, 1, 0]
move = ['d', 'l', 'r', 'u']
from collections import deque
import sys
def solution(n, m, x, y, r, c, k):
sys.setrecursionlimit(5000)
q = deque([])
q.append((x, y, 0, ''))
# ์ต๋จ ๊ฑฐ๋ฆฌ ๊ธธ์ด
min_dist = abs(x-r) + abs(y-c)
# ์ต๋จ ๊ฑฐ๋ฆฌ๋ณด๋ค ์ด๋ ๊ฐ๋ฅ ๊ฑฐ๋ฆฌ๊ฐ ์๊ฑฐ๋ ๋๋ฌ์ด ๋ถ๊ฐ๋ฅํ ์์น์ผ ๋
if min_dist > k or (k - min_dist) % 2 == 1:
return 'impossible'
def find_path(a, b, count, path):
# k๋ฒ์ผ๋ก ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ
if a == r and b == c and (k-count) % 2 == 1:
return 'impossible'
# k๋ฒ์งธ ๋๋ฌ
if a == r and b == c and count == k:
return path
for i in range(4):
na = a + dx[i]
nb = b + dy[i]
if 0 < na <= n and 0 < nb <= m:
# ์ด๋ ์์น๊ฐ ์ต์ข
์์น์ ๋๋ฌํ ์ ์์๋งํผ ๋ฉ์ด์ง ๋
if abs(na-r) + abs(nb-c) > k - (count+1):
continue
result = find_path(na, nb, count+1, path + move[i])
return result
return find_path(x, y, 0, '')
- ์ ํ์ฑ
ํ ์คํธ 1 ใ | ํต๊ณผ (0.21ms, 10.4MB) |
ํ ์คํธ 2 ใ | ํต๊ณผ (0.15ms, 10.4MB) |
ํ ์คํธ 3 ใ | ํต๊ณผ (0.01ms, 10.4MB) |
ํ ์คํธ 4 ใ | ํต๊ณผ (0.03ms, 10.3MB) |
ํ ์คํธ 5 ใ | ํต๊ณผ (0.04ms, 10.4MB) |
ํ ์คํธ 6 ใ | ํต๊ณผ (0.02ms, 10.4MB) |
ํ ์คํธ 7 ใ | ํต๊ณผ (0.02ms, 10.3MB) |
ํ ์คํธ 8 ใ | ํต๊ณผ (0.03ms, 10.3MB) |
ํ ์คํธ 9 ใ | ํต๊ณผ (10.15ms, 16MB) |
ํ ์คํธ 10 ใ | ํต๊ณผ (7.63ms, 16.1MB) |
ํ ์คํธ 11 ใ | ํต๊ณผ (9.03ms, 16.1MB) |
ํ ์คํธ 12 ใ | ํต๊ณผ (6.72ms, 16MB) |
ํ ์คํธ 13 ใ | ํต๊ณผ (7.26ms, 16.1MB) |
ํ ์คํธ 14 ใ | ํต๊ณผ (8.84ms, 16MB) |
ํ ์คํธ 15 ใ | ํต๊ณผ (6.66ms, 16.2MB) |
ํ ์คํธ 16 ใ | ํต๊ณผ (6.79ms, 15.7MB) |
ํ ์คํธ 17 ใ | ํต๊ณผ (6.54ms, 15.9MB) |
ํ ์คํธ 18 ใ | ํต๊ณผ (8.29ms, 15.9MB) |
ํ ์คํธ 19 ใ | ํต๊ณผ (6.31ms, 16.2MB) |
ํ ์คํธ 20 ใ | ํต๊ณผ (9.90ms, 15.8MB) |
ํ ์คํธ 21 ใ | ํต๊ณผ (8.67ms, 15.8MB) |
ํ ์คํธ 22 ใ | ํต๊ณผ (8.65ms, 15.8MB) |
ํ ์คํธ 23 ใ | ํต๊ณผ (13.91ms, 16.1MB) |
ํ ์คํธ 24 ใ | ํต๊ณผ (9.83ms, 16.1MB) |
ํ ์คํธ 25 ใ | ํต๊ณผ (6.76ms, 15.8MB) |
ํ ์คํธ 26 ใ | ํต๊ณผ (9.31ms, 15.8MB) |
ํ ์คํธ 27 ใ | ํต๊ณผ (9.86ms, 16MB) |
ํ ์คํธ 28 ใ | ํต๊ณผ (9.50ms, 15.8MB) |
ํ ์คํธ 29 ใ | ํต๊ณผ (9.52ms, 16MB) |
ํ ์คํธ 30 ใ | ํต๊ณผ (9.42ms, 16MB) |
ํ ์คํธ 31 ใ | ํต๊ณผ (0.01ms, 10.3MB) |
3. ํด์ค
์ด ๋ฌธ์ ๋ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ฅผ ์ ๊ฑธ๋ฌ๋ด์ฃผ์ด ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- (x, y) โ (r, c)์ ์ต๋จ ๊ฒฝ๋ก๋ณด๋ค k(์ด๋ ๊ฐ๋ฅ ๊ฑฐ๋ฆฌ)๊ฐ ์์ ๋
k(์ด๋ ๊ฐ๋ฅ ๊ฑฐ๋ฆฌ)์์ (x, y) โ (r, c)์ ์ต๋จ ๊ฒฝ๋ก ๊ธธ์ด๋ฅผ ๋บ ๊ธธ์ด๊ฐ 2์ ๋ฐฐ์๊ฐ ์๋ ๋
โ ์ต๋จ ๊ฑฐ๋ฆฌ ์ด๋ ํ ์ข,์ฐ ํน์ ์,์๋๋ก ์์ง์ฌ ๊ฐ์ ์๋ฆฌ๋ก ๋์์ฌ ์ ์์ด์ผํ๋ค.
- ์ด๋์ค์ ์์น์์ ์ต์ข ์์น๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋จ์ ์์ง์์ผ๋ก ๊ฐ ์ ์์ ๋
์ด๋ ์ฌ์ ์์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์์ผํ๊ธฐ ๋๋ฌธ์ d(์๋), l(์ผ์ชฝ), r(์ค๋ฅธ์ชฝ), u(์์ชฝ) ์์ผ๋ก ์์ง์ด๋๋ก ๋์ดํ๊ณ ๊ฐ์ฅ ์ฒซ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๋ค.
์ฒ์์๋ bfs๋ก ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ์ง๋ง, bfs๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์ข ๋ชฉ์ ์ง๋ก ๋ฐ๋ก๊ฐ์ง์๊ณ ์ฃผ๋ณ์ ๋ชจ๋ ํ์ธํ๊ณ ์ต์ข ๋ชฉ์ ์ง๋ก ๊ฐ๊ธฐ ๋๋ฌธ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค.
dfs๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข ๋ชฉ์ ์ง๊น์ง ๋ฐ๋ก ๊ฐ ์ ์๋๋ก ์ฝ๋๋ฅผ ์ฌ๊ตฌํํ๋ค. ์ด๋ setrecursionlimit์ ํ์ง ์์ผ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ ์ ์๋ค.