๐ข ๋ฏธ๋ก ํ์ถ ๋ช ๋ ์ด
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
"""
๋ฏธ๋ก ํ์ถ ๋ช
๋ น์ด
๐ ๋ฌธ์
n x m ๊ฒฉ์ ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง๋๋ค.
๋น์ ์ ๋ฏธ๋ก์ (x, y)์์ ์ถ๋ฐํด (r, c)๋ก ์ด๋ํด์ ํ์ถํด์ผ ํฉ๋๋ค.
๋จ, ๋ฏธ๋ก๋ฅผ ํ์ถํ๋ ์กฐ๊ฑด์ด ์ธ ๊ฐ์ง ์์ต๋๋ค.
๊ฒฉ์์ ๋ฐ๊นฅ์ผ๋ก๋ ๋๊ฐ ์ ์์ต๋๋ค.
(x, y)์์ (r, c)๊น์ง ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๊ฐ ์ด k์ฌ์ผ ํฉ๋๋ค.
์ด๋, (x, y)์ (r, c)๊ฒฉ์๋ฅผ ํฌํจํด, ๊ฐ์ ๊ฒฉ์๋ฅผ ๋ ๋ฒ ์ด์ ๋ฐฉ๋ฌธํด๋ ๋ฉ๋๋ค.
๋ฏธ๋ก์์ ํ์ถํ ๊ฒฝ๋ก๋ฅผ ๋ฌธ์์ด๋ก ๋ํ๋์ ๋,
๋ฌธ์์ด์ด ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒฝ๋ก๋ก ํ์ถํด์ผ ํฉ๋๋ค.
์ด๋ ๊ฒฝ๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์์ด๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
l: ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ด๋
r: ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋
u: ์์ชฝ์ผ๋ก ํ ์นธ ์ด๋
d: ์๋์ชฝ์ผ๋ก ํ ์นธ ์ด๋
์๋ฅผ ๋ค์ด, ์ผ์ชฝ์ผ๋ก ํ ์นธ, ์๋ก ํ ์นธ, ์ผ์ชฝ์ผ๋ก ํ ์นธ ์์ง์๋ค๋ฉด, ๋ฌธ์์ด "lul"๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
๋ฏธ๋ก์์๋ ์ธ์ ํ ์, ํ, ์ข, ์ฐ ๊ฒฉ์๋ก ํ ์นธ์ฉ ์ด๋ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด 3 x 4 ๊ฒฉ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
....
..S.
E...
๋ฏธ๋ก์ ์ข์ธก ์๋จ์ (1, 1)์ด๊ณ ์ฐ์ธก ํ๋จ์ (3, 4)์
๋๋ค.
.์ ๋น ๊ณต๊ฐ, S๋ ์ถ๋ฐ ์ง์ , E๋ ํ์ถ ์ง์ ์
๋๋ค.
ํ์ถ๊น์ง ์ด๋ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ k๊ฐ 5๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ๋ก๋ก ํ์ถํ ์ ์์ต๋๋ค.
lldud
ulldd
rdlll
dllrl
dllud
...
์ด๋ dllrl๋ณด๋ค ์ฌ์ ์์ผ๋ก ๋น ๋ฅธ ๊ฒฝ๋ก๋ก ํ์ถํ ์๋ ์์ต๋๋ค.
๊ฒฉ์์ ํฌ๊ธฐ๋ฅผ ๋ปํ๋ ์ ์ n, m, ์ถ๋ฐ ์์น๋ฅผ ๋ปํ๋ ์ ์ x, y,
ํ์ถ ์ง์ ์ ๋ปํ๋ ์ ์ r, c, ํ์ถ๊น์ง ์ด๋ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๋ปํ๋ ์ ์ k๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค.
์ด๋, ๋ฏธ๋ก๋ฅผ ํ์ถํ๊ธฐ ์ํ ๊ฒฝ๋ก๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๋จ, ์ ์กฐ๊ฑด๋๋ก ๋ฏธ๋ก๋ฅผ ํ์ถํ ์ ์๋ ๊ฒฝ์ฐ "impossible"์ return ํด์ผ ํฉ๋๋ค.
๐งก ์ ํ ์ฌํญ
2 โค n (= ๋ฏธ๋ก์ ์ธ๋ก ๊ธธ์ด) โค 50
2 โค m (= ๋ฏธ๋ก์ ๊ฐ๋ก ๊ธธ์ด) โค 50
1 โค x โค n
1 โค y โค m
1 โค r โค n
1 โค c โค m
(x, y) โ (r, c)
1 โค k โค 2,500
๐ ์
์ถ๋ ฅ
n m x y r c k result
3 4 2 3 3 1 5 "dllrl"
2 2 1 1 2 2 2 "dr"
3 3 1 2 3 3 4 "impossible"
"""
from collections import deque
def distance(x, y, r, c) :
return abs(x - (r-1)) + abs(y - (c-1))
# ๊ฒฉ์์ ํฌ๊ธฐ n, m, ์ถ๋ฐ ์์น x, y, ํ์ถ ์ง์ r, c, ํ์ถ๊น์ง ์ด๋ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ k
def solution(n, m, x, y, r, c, k):
answer = ""
# k > ์ต๋จ ๊ฑฐ๋ฆฌ, ์ต๋จ๊ฑฐ๋ฆฌ - k ๊ฐ ์๋ค ๊ฐ๋ค ์๋ณต์ด ์๋๋ ํ์๋ผ๋ฉด ๋์ฐฉ ๋ถ๊ฐ
if distance(x-1, y-1, r, c) > k or ((distance(x-1, y-1, r, c) - k) % 2 == 1) :
return "impossible"
# d l r u
dir = ["d", "l", "r", "u"]
dx = [1, 0, 0, -1]
dy = [0, -1, 1, 0]
queue = deque()
queue.append((x - 1, y - 1, 0, ""))
while queue:
x1, y1, cnt, answer = queue.popleft()
if (x1 == r-1) and (y1 == c-1) and cnt == k :
return answer
for i in range(4) :
nx = x1 + dx[i]
ny = y1 + dy[i]
if 0 <= nx < n and 0 <= ny < m :
# ๋จ์ ๊ฑฐ๋ฆฌ + ์ด๋ํ๋ ๊ฑฐ๋ฆฌ + ๊ทธ๋ด ๊ฑฐ๋ฆฌ 1 > k ์ด๋ฉด ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ใฑใฑ
if distance(nx, ny, r, c) + cnt + 1 > k :
continue
# queue ์
๋ ํ๊ณ ๋ค์ d ๋ถํฐ
answer += dir[i]
queue.append((nx, ny, cnt+1, answer))
break
์ ํ์ฑ
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
์ ํ์ฑ ํ ์คํธ ํ ์คํธ 1 ใ ํต๊ณผ (0.11ms, 10.3MB) ํ ์คํธ 2 ใ ํต๊ณผ (0.26ms, 10.4MB) ํ ์คํธ 3 ใ ํต๊ณผ (0.00ms, 10.5MB) ํ ์คํธ 4 ใ ํต๊ณผ (0.02ms, 10.5MB) ํ ์คํธ 5 ใ ํต๊ณผ (0.02ms, 10.2MB) ํ ์คํธ 6 ใ ํต๊ณผ (0.02ms, 10.3MB) ํ ์คํธ 7 ใ ํต๊ณผ (0.02ms, 10.3MB) ํ ์คํธ 8 ใ ํต๊ณผ (0.02ms, 10.3MB) ํ ์คํธ 9 ใ ํต๊ณผ (2.71ms, 10.1MB) ํ ์คํธ 10 ใ ํต๊ณผ (2.53ms, 10.5MB) ํ ์คํธ 11 ใ ํต๊ณผ (2.65ms, 10.3MB) ํ ์คํธ 12 ใ ํต๊ณผ (2.50ms, 10.4MB) ํ ์คํธ 13 ใ ํต๊ณผ (2.54ms, 10.2MB) ํ ์คํธ 14 ใ ํต๊ณผ (2.64ms, 10.4MB) ํ ์คํธ 15 ใ ํต๊ณผ (2.50ms, 10.4MB) ํ ์คํธ 16 ใ ํต๊ณผ (2.56ms, 10.1MB) ํ ์คํธ 17 ใ ํต๊ณผ (2.68ms, 10.2MB) ํ ์คํธ 18 ใ ํต๊ณผ (2.64ms, 10.4MB) ํ ์คํธ 19 ใ ํต๊ณผ (2.48ms, 10.2MB) ํ ์คํธ 20 ใ ํต๊ณผ (2.68ms, 10.4MB) ํ ์คํธ 21 ใ ํต๊ณผ (3.06ms, 10.4MB) ํ ์คํธ 22 ใ ํต๊ณผ (2.52ms, 10.2MB) ํ ์คํธ 23 ใ ํต๊ณผ (2.66ms, 10.3MB) ํ ์คํธ 24 ใ ํต๊ณผ (2.57ms, 10.3MB) ํ ์คํธ 25 ใ ํต๊ณผ (2.66ms, 10.3MB) ํ ์คํธ 26 ใ ํต๊ณผ (2.75ms, 10.3MB) ํ ์คํธ 27 ใ ํต๊ณผ (2.46ms, 10.2MB) ํ ์คํธ 28 ใ ํต๊ณผ (2.59ms, 10.5MB) ํ ์คํธ 29 ใ ํต๊ณผ (2.58ms, 10.3MB) ํ ์คํธ 30 ใ ํต๊ณผ (2.73ms, 10.1MB) ํ ์คํธ 31 ใ ํต๊ณผ (0.00ms, 10.4MB) ์ฑ์ ๊ฒฐ๊ณผ ์ ํ์ฑ: 100.0 ํฉ๊ณ: 100.0 / 100.0
3. ํด์ค
dlru ์์๋ก ์ต๋จ๊ฑฐ๋ฆฌ์ ์ด๋ํ ์ ์๋ k ๋ฅผ ํตํด queue ์ ์ง์ด ๋ฃ๋๋ค
์ด๋ฏธ ์์๋ฅผ ์ฌ์ ์์ผ๋ก ๋์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก sort ํ ํ์๊ฐ ์๋ค
๋จผ์ , ์ต๋จ ๊ฑฐ๋ฆฌ ๋บ ํ ๋๋จธ์ง ๊ฑฐ๋ฆฌ๋ฅผ ์๋ณต์ผ๋ก ๊ฐ๋ฅํ์ง๋ฅผ ํ์ธํ๊ณ ์ํํ๋ค
This post is licensed under CC BY 4.0 by the author.