๐ข ์ฅ๊ตฐ
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3
34136KB
68ms
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
"""
[16509] ์ฅ๊ตฐ
๐ ๋ฌธ์
์ค๋๋ง์ ํด๊ฐ๋ฅผ ๋์จ ํธ๊ทผ์ด๋ ๋ฌธ๋ ๋์๋ฆฌ๋ฐฉ์ ์๋ ์ฅ๊ธฐ๊ฐ ํ๊ณ ์ถ์ด์ก๋ค.
ํ์ง๋ง ์ฅ๊ธฐ๋ฅผ ์ค๋ซ๋์ ํ์ง ์์ ํ์ธ์ง ์์ ์๋ ์ ์ฐ๋ ์์ ์ ๋๋ก ์ฐ๋ ๊ฒ์ด ๋๋ฌด ํ๋ค์๋ค.
ํธ๊ทผ์ด๋ฅผ ์ํด ์์ ์ด๋ป๊ฒ ์จ์ผ ํ ์ง ๋์์ฃผ์.
์ ๊ทธ๋ฆผ์ 10ร9 ํฌ๊ธฐ์ ์ฅ๊ธฐํ์ ๋ํ๋ด๋ฉฐ,
์์ (5, 4)์, ์์ (1, 4)์ ์๋ฆฌ ์ก๊ณ ์๋ ๊ธฐ๋ฌผ์ด๋ค.
(0, 3)๊ณผ (2, 5)๋ฅผ ๊ผญ์ง์ ์ผ๋ก ํ๋ ์ฌ๊ฐํ๊ณผ, (7, 3)๊ณผ (9, 5)๋ฅผ ๊ผญ์ง์ ์ผ๋ก ํ๋ ์ฌ๊ฐํ์ ์์ด ์์นํ ์ ์๋ ๊ถ์ฑ์ด๋ผ๊ณ ํ๋ค.
์์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 8๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์์ง์ผ ์ ์๋๋ฐ, ์, ํ, ์ข, ์ฐ๋ก ํ ์นธ์ ์ด๋ํ ํ์ ๊ฐ์ ๋ฐฉํฅ ์ชฝ ๋๊ฐ์ ์ผ๋ก ๋ ์นธ ์ด๋ํ๋ค.
๋ง์ฝ ์์ด ์ด๋ํ๋ ๊ฒฝ๋ก์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ค๋ฅธ ๊ธฐ๋ฌผ์ด ์๋ค๋ฉด ์์ ๊ทธ์ชฝ์ผ๋ก ์ด๋ํ ์ ์๋ค.
๋ํ, ์์ด ์ฅ๊ธฐํ์ ๋ฒ์ด๋ ์๋ ์๋ค.
10ร9 ํฌ๊ธฐ์ ์ฅ๊ธฐํ ์์ ์๊ณผ ์์ ์ฒ์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋,
์์ด ์์๊ฒ ๋๋ฌํ ์ ์๋ ์ต์ ์ด๋ ํ์๋ฅผ ๊ตฌํ์ฌ๋ผ.
๐ ์
๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์์ ์์น๋ฅผ ์๋ฏธํ๋ ์ ์ R1, C1์ด ์ฃผ์ด์ง๋ค.
๋ ๋ฒ์งธ ์ค์๋ ์์ ์์น๋ฅผ ์๋ฏธํ๋ ์ ์ R2, C2๊ฐ ์ฃผ์ด์ง๋ค.
์ฅ๊ธฐํ์์ Ri (0 โค Ri โค 9)๋ ํ์, Ci (0 โค Ci โค 8)๋ ์ด์ ์๋ฏธํ๋ค.
์์ ํญ์ ๊ถ์ฑ์ ์๋ฆฌ ์ก๊ณ ์์ผ๋ฉฐ, ์๊ณผ ์์ ์์น๋ ๊ฒน์น์ง ์๋๋ค.
๐ ์ถ๋ ฅ
์์ด ์์๊ฒ ๋๋ฌํ ์ ์๋ ์ต์ ์ด๋ ํ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋๋ฌํ ์ ์๋ค๋ฉด -1์ ์ถ๋ ฅํ๋ค.
"""
from collections import deque
# ์์ ์์น
r1, c1 = map(int, input().split())
# ์์ ์์น
r2, c2 = map(int, input().split())
step_x = [
#### [์ํ์ข์ฐ ์ค ํ์นธ ์ด๋, ๋๊ฐ์ ์ผ๋ก ํ์นธ ์ด๋]
# ์
[-1, -2],
[-1, -2],
# ์ผ์ชฝ
[0, -1],
[0, 1],
# ์๋์ชฝ
[1, 2],
[1, 2],
# ์ค๋ฅธ์ชฝ
[0, -1],
[0, 1]
]
step_y = [
# ์
[0, -1],
[0, 1],
# ์ผ์ชฝ
[-1, -2],
[-1, -2],
# ์๋์ชฝ
[0, -1],
[0, 1],
# ์ค๋ฅธ์ชฝ
[1, 2],
[1, 2]
]
visit = [[0] * 9 for _ in range(10)]
# ์, ์ผ์ชฝ, ์๋์ชฝ, ์ค๋ฅธ์ชฝ
dx = [-3, -3, -2, 2, 3, 3, -2, 2]
dy = [-2, 2, -3, -3, -2, 2, 3, 3]
def in_range(nx, ny) :
return 0 <= nx < 10 and 0 <= ny < 9
# ์ด๋ ๊ฒฝ๋ก ์ดํด๋ณด๊ธฐ
def move(x, y, i) :
for j in range(2) :
# [์ํ์ข์ฐ ์ค ํ์นธ ์ด๋, ๋๊ฐ์ ์ผ๋ก ํ์นธ ์ด๋]
nx = x + step_x[i][j]
ny = y + step_y[i][j]
# ์ด๋ ๊ฒฝ๋ก์ ์์ด ์์ผ๋ฉด
if (nx == r2 and ny == c2) :
return 0
return 1
visited = [[0] * 9 for _ in range(10)]
# ์์ ์ํ์ข์ฐ ํ์นธ + ๋๊ฐ์ ๋์นธ ํ ์์น
def bfs(x, y) :
queue = deque()
queue.append([x, y, 0])
visited[x][y] = 1
while queue :
x, y, cnt = queue.popleft()
for i in range(8) :
nx = x + dx[i]
ny = y + dy[i]
# ์ํ์ข์ฐ ์ค ํ์นธ + ๋๊ฐ์ ๋์นธ ํ์ ๋ ๋ฒ์ ๋์ด๊ฐ๋ฉด! for ๋ฌธ์ผ๋ก ๋์๊ฐ๋ค
if not in_range(nx, ny) :
continue
# ๊ทธ ์ ์ ์ด๋๊ฒฝ๋ก ์ดํด๋ณด๊ธฐ.. ์ ์๋ค๋ฉด! for ๋ฌธ์ผ๋ก ๋์๊ฐ๋ค
# ๊ธฐ์กด ์์ ์์น + ์ด๋ํ ๋ฐฉํฅ ์ธ๋ฑ์ค
if not move(x, y, i) :
continue
# ์ด๋ฏธ ๋ฐฉ๋ฌธ ํ๋ค๋ฉด
if visited[nx][ny] == 1 :
continue
# ์ ๋ง๋๋ค๋ฉด
if nx == r2 and ny == c2 :
# ์์ด ์์๊ฒ ๋๋ฌํ ์ ์๋ ์ต์ ์ด๋ ํ์๋ฅผ ์ถ๋ ฅ
return cnt + 1
visited[nx][ny] = 1
# cnt += 1 ํ๊ณ ๋ฐ์ cnt๋ฅผ ๋์
ํ๋๋ฐ ์ซ์๊ฐ ๋ ์ปค์ ธ์ ๋์ด ๋ญ๊น?
queue.append([nx, ny, cnt + 1])
# ๋ง์ฝ ๋๋ฌํ ์ ์๋ค๋ฉด -1์ ์ถ๋ ฅ
return -1
# ์์ ์์น
print(bfs(r1, c1))
3. ํด์ค
8๋ฐฉํฅ๋ง๋ค, ํ์นธ ์ด๋ + ๋๊ฐ์ ๋๋ฒ ์ด๋ ํ๋ ๋ฐฉํฅ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ฃผ์๋ค.
- ๋จผ์ ๋ฐฉํฅ์ ์ง์ ํด์ ํ์นธ์ด๋ + ๋๊ฐ์ ๋๋ฒ ํ์ ๋ ๋ฒ์ ๋์ด๊ฐ๋ฉด pass
- ๊ทธ์ ์ ์ด๋ ๊ณผ์ ์์ 2๊ฐ์ง ๊ฒฝ์ฐ์ ์์ด ์๋ค๋ฉด pass
- ์ด๋ฏธ ๋ฐฉ๋ฌธ ํ๋ค๋ฉด pass
- ๋ง์ง๋ง์ผ๋ก ์ ๋ง๋ฌ๋ค๋ฉด ์ต์ ์ด๋ ํ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค
- ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ๊ณ ํ์ฌ ์์น๋ฅผ queue ์ append ํ๊ณ ๋น ๋๊น์ง while ๋ฌธ ๋๋ฆฐ๋ค
This post is licensed under CC BY 4.0 by the author.