๐น ์ฅ๊ตฐ
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3
34104KB
88ms
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
# ์ ์์น
sx, sy = map(int, input().split())
# ์ ์์น
kx, ky = list(map(int, input().split()))
# ์์ข, ์์ฐ, ํ์ข, ํ์ฐ, ์ข์, ์ขํ, ์ฐ์, ์ฐํ
dx = [[-1, -1, -1], [-1, -1, -1], [1, 1, 1], [1, 1, 1], [0, -1, -1], [0, 1, 1], [0, -1, -1], [0, 1, 1]]
dy = [[0, -1, -1], [0, 1, 1], [0, -1, -1], [0, 1, 1], [-1, -1, -1], [-1, -1, -1], [1, 1, 1], [1, 1, 1]]
dist = [[0] * 9 for _ in range(10)]
from collections import deque
def bfs():
q = deque([])
q.append((sx, sy))
while q:
x, y = q.popleft()
# ์์ ๋๋ฌ
if x == kx and y == ky:
return dist[x][y]
for i in range(8):
flag = True
nx, ny = x, y
for j in range(3):
nx += dx[i][j]
ny += dy[i][j]
# ์ฅ๊ธฐํ ๋ฐ์ผ๋ก ์ด๋ํ ๋
if nx < 0 or nx >= 10 or ny < 0 or ny >= 9:
flag = False
break
# ์ด๋ ๊ฒฝ๋ก์ ๋ค๋ฅธ ๊ธฐ๋ฌผ(์)์ด ์์ ์
if j != 2 and nx == kx and ny == ky:
flag = False
break
# ์ด๋ ๊ฐ๋ฅํ ์นธ์ด๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
if flag == True and dist[nx][ny] == 0:
dist[nx][ny] = dist[x][y] + 1 # ์ต๋จ ๊ฑฐ๋ฆฌ ํ์
q.append((nx, ny))
# ์์๊ฒ ๋๋ฌ ๋ถ๊ฐ ์
return -1
print(bfs())
3. ํด์ค
์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๊ธฐ ์ํด bfs(๋๋น์ฐ์ ํ์)์ ์ฌ์ฉํด์ฃผ์๋ค.
๊ฐ ์์น์ ์ต๋จ ๊ฒฝ๋ก ์ ๋ณด๋ฅผ dist
2์ฐจ์ ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค.
์์ด ์์ง์ผ ์ ์๋ ์ด 8๊ฐ์ง์ ๊ฒฝ์ฐ์์ ์ด๋ ๊ฐ๋ฅ ์์น 3๊ฐ์ง๋ฅผ 2์ค ํฌ๋ฌธ์ผ๋ก ํ์ธํด์ค๋ค.
๊ฐ ์์น๊ฐ ์ฅ๊ธฐํ ๋ด์ ์๊ณ , ์ด๋ ๊ฒฝ๋ก์ ๋ค๋ฅธ ๊ธฐ๋ฌผ(์)์ด ์๋์ง ํ์ธํด์ฃผ๊ณ ์กฐ๊ฑด์ ๋ง์กฑํ์ ๋ ์ด๋ํ ์นธ์ ์์น๊ฐ ์ฒ์ ๋์ฐฉํ ์์น๋ผ๋ฉด(dist
์ ๊ฐ์ด 0) ํด๋น ์์น์ ์ต๋จ ๊ฑฐ๋ฆฌ ๊ฐ์ ๋ฃ์ด์ค๋ค.
์ต๋จ ๊ฑฐ๋ฆฌ๋ โ์ด๋ ๋ฐ๋ก ์ง์ ์นธ ๊ฑฐ๋ฆฌ + 1โ์ด๋ค.
ํ์ฌ ์์ ์์น๊ฐ ์์ ์์น๊ฐ ๊ฐ๋ค๋ฉด ํด๋น ์์น์ dist
๊ฐ์ ๋ฆฌํดํ๋ค.
๋ง์ฝ ํ๋ฅผ ๋ชจ๋ ๋์์ ๋๋ ์์ ๋ง๋์ง ๋ชปํ๋ค๋ฉด -1์ ๋ฆฌํดํ๋ค.