๐๋ฌธ์
https://www.acmicpc.net/problem/7562
๐์ด๋ค ์๊ณ ๋ฆฌ์ฆ?
1. ์์ง์ฌ์ผํ๋ '์ต์ ํ์'๋ฅผ ์์์ผ ํ๋ฏ๋ก ๋น์ฐํ BFS๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
2. ์ํ์ข์ฐ ์์ง์์ ๊ณ ๋ คํด์ฃผ๋ฉด ๋๋ ์ผ๋ฐ์ ์ธ BFS์๋ ๋ค๋ฅด๊ฒ ๋์ดํธ์ ์์ง์์ ๊ณ ๋ คํด์ค์ผ ํ๋ค.
3. ๋๋จธ์ง๋ ๋ค๋ฅธ ์ฌ์ด bfs๋ฌธ์ ๋ค๊ณผ ๋ค๋ฅผ๋ฐ๊ฐ ์๋ค.
๐ป์ฝ๋
#7562 ๋์ดํธ์ ์ด๋
from collections import deque
# 2. bfs
def bfs(x,y):
board[x][y] = 0 # ์ด๊ธฐ ๋์ดํธ์ ์์น 0์ผ๋ก ์ด๊ธฐํ
deq = deque()
deq.append([x,y])
dx = [-2,-1,1,2,2,1,-1,-2] # ๋์ดํธ์ ์์ง์ ์ขํ
dy = [1,2,2,1,-1,-2,-2,-1]
while deq:
x,y = deq.popleft()
if board[tar_i][tar_j] != -1: # ํ์ถ ์กฐ๊ฑด
print(board[tar_i][tar_j])
return
for i in range(8): # 8๋ฐฉํฅ์ผ๋ก ๊ฐ๊ฐ ๋์๋ณด๊ธฐ์ํ for๋ฌธ
nx = x + dx[i]
ny = y + dy[i]
# board ๋ฐ์ผ๋ก ๋๊ฐ๋ฉด ๋ฐ์ ์ฝ๋ ์คํ x
if nx < 0 or nx > (l-1) or ny < 0 or ny > (l-1):
continue
if board[nx][ny] == -1: # ๋์ดํธ๊ฐ ํ๋ฒ๋ ์ค์ง ์์ ์ขํ๋ฉด
board[nx][ny] = board[x][y] + 1 # ์ขํ์ ๋์ดํธ์ ์์ง์ธ ํ์ +1
deq.append([nx,ny])
return
# 1. input
t = int(input()) # test case
for _ in range(t):
l = int(input()) # ์ฒด์คํ ํ ๋ณ์ ํฌ๊ธฐ
board = [[-1 for j in range(l)] for i in range(l)]
now_i,now_j = map(int,input().split()) # ๋์ดํธ ์ด๊ธฐ ์์น
tar_i,tar_j = map(int,input().split()) # ๋์ดํธ ๋ชฉํ ์์น
bfs(now_i,now_j) # ํ์
๐์ฝ๋ ์ค๋ช
1. bfs(now_i, now_j)์ ๊ฐ์ด ๋์ดํธ์ ์ด๊ธฐ ์์น๋ง์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์ด์ ๋ ๋์ดํธ์ ํ์ฌ ์์น๊ฐ ๊ณ์ํด์ ์ ๋ฐ์ดํธ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ดํธ์ ๋ชฉํ ์์น๋ ๋ฐ๋๋ ๊ฐ์ด ์๋๋ฏ๋ก ํ๋ผ๋ฏธํฐ๊ฐ์ผ๋ก ๋์ดํธ์ ์ด๊ธฐ ์์น๋ง์ ๋ฐ๋๋ก ํ๋ค.
2. bfs ๋ฌธ์ ๋ฅผ ๋ช ๋ฒ ํ์ด๋ดค๋ค๋ฉด ๋์ดํธ์ ์์ง์์ ๊ณ ๋ คํ์ฌ dx, dy ๋ณ์์ ์ ์ ํ ๊ฐ์ ๋ฃ์ด ์ค ์ ์๊ฒ ๋๋ค. ์ด ๋ถ๋ถ์ด ํท๊ฐ๋ฆฐ๋ค๋ฉด https://chjcoder.tistory.com/2 ์ด ๋ฌธ์ ์ ๊ฐ์ด ์ํ์ข์ฐ ์์ง์๋ง์ ๊ณ ๋ คํ๋ bfs ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์.
3. ์ขํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1992 ์ฟผ๋ํธ๋ฆฌ (ํ์ด์ฌ/python) (0) | 2023.07.12 |
---|---|
[๋ฐฑ์ค] 12904 A์ B (ํ์ด์ฌ/python) (0) | 2023.07.11 |
[๋ฐฑ์ค] 1697 ์จ๋ฐ๊ผญ์ง (ํ์ด์ฌ/python) (0) | 2023.06.20 |
[๋ฐฑ์ค] 2798 ๋ธ๋์ญ (ํ์ด์ฌ/python) (0) | 2023.06.19 |
[๋ฐฑ์ค] 5622 ๋ค์ด์ผ (ํ์ด์ฌ/python) (0) | 2023.06.19 |