๐งฉ๋ฌธ์ ํด์
์ฒด์ค ํ์ ํฌ๊ธฐ์ ํ์ฌ ๋์ดํธ์ ์์น ๊ทธ๋ฆฌ๊ณ ๋ชฉํ ์์น๊ฐ ์ฃผ์ด์ก์ ๋ ์ต์ ์ด๋ ํ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ!
๐ ํ์ด
๋์ดํธ์ ์ด๋ ๊ฐ๋ฅ ๊ฒฝ๋ก๋ ๋ค์๊ณผ ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
์ต์ ์ด๋ ํ์๋ฅผ ๊ตฌํ๋ ค๋ฉด ์ด์ ์ ๋ฐฉ๋ฌธ ํ๋ ๊ณณ์ ์ง์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒด์คํ์์ ๋ฒ์ด๋๋ ์์น๋ ์ ์ธํ๋ค. ์ด ๋๊ฐ์ง๋ฅผ ์งํค๋ฉด์ BFS ํ์์ ํ์๋ค.
์นธ์ ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ด ์๋๋ผ ๋ชฉํ ์์น์ ๋๋ฌํ๋ฉด ํ์์ ๋ฉ์ถ ๊ฒ์ด๊ธฐ์ DFS ๋ณด๋ค BFS๊ฐ ๋ ํจ์จ์ ์ด๋ค.
๐ป ์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
# ๋์ดํธ ์ด๋ ๊ฒฝ๋ก
dx = [-2,-1,1,2,2,1,-1,-2]
dy = [1,2,2,1,-1,-2,-2,-1]
def bfs():
queue= deque()
queue.append((x1, y1, 0)) # ํ์ฌ ์์น์ ์นด์ดํธ 0์ ํ์ ์ฝ์
pan[x1][y1] = 1 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
while queue: # ํ๊ฐ ๋น ๋๊น์ง
x,y,cnt = queue.popleft()
for i in range(8): # 8๊ฐ์ง ๋ฐฉํฅ ํ์
nx = x + dx[i]
ny = y + dy[i]
if -1 < nx and nx < l and -1 < ny and ny < l: # ์ฒด์คํ์์ ๋ฒ์ด๋์ง ์๋๋ค๋ฉด
if pan[nx][ny] == 0: # ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
pan[nx][ny] = 1 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
queue.append((nx, ny, cnt+1)) # ์ด๋ ์์น์ ์นด์ดํธ +1์ ํ์ ์ฝ์
if nx == x2 and ny == y2: # ํ์ฌ ์์น๊ฐ ๋ชฉํ ์์น์ ๋๋ฌํ๋ค๋ฉด ์นด์ดํธ +1 ๋ฆฌํด
return cnt + 1
for i in range(int(input())):
l = int(input().rstrip()) # ์ฒด์คํ ํฌ๊ธฐ
pan = [[0 for i in range(l)] for j in range(l)] # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฆฌ์คํธ
x1,y1 = map(int, input().rstrip().split()) # ํ์ฌ ์์น
x2,y2 = map(int, input().rstrip().split()) # ๋ชฉํ ์์น
if x1 == x2 and y1 == y2: # ํ์ฌ์์น์ ๋ชฉํ์์น๊ฐ ๋์ผํ๋ค๋ฉด ํ์ํ์ง ์๊ณ ๋ฐ๋ก 0์ถ๋ ฅ
print(0)
else: # BFS ํจ์ ํธ์ถ
print(bfs())
๐ ๋ฌธ์ ๋งํฌ : ๋์ดํธ์ ์ด๋
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2775๋ฒ: ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ - ํ์ด์ฌ (0) | 2022.06.02 |
---|---|
[๋ฐฑ์ค] 5014๋ฒ: ์คํํธ๋งํฌ - ํ์ด์ฌ (0) | 2022.06.01 |
[๋ฐฑ์ค] 2573๋ฒ: ๋น์ฐ - ํ์ด์ฌ (0) | 2022.05.30 |
[๋ฐฑ์ค] 2502๋ฒ: ๋ก ๋จน๋ ํธ๋์ด (0) | 2022.05.26 |
[๋ฐฑ์ค] 1654๋ฒ: ๋์ ์๋ฅด๊ธฐ - ํ์ด์ฌ (0) | 2022.05.23 |