티스토리 뷰
728x90
반응형
문제
https://www.acmicpc.net/problem/7562
코드
import collections
t = int(input())
for i in range(t):
n = int(input())
x, y = map(int, input().split())
rx , ry = map(int, input().split())
dx, dy = [-1,-2, -1, -2, 1, 2, 1, 2], [2, 1, -2, -1, 2, 1, -2, -1]
distance = [[0] * n for _ in range(n)]
queue = collections.deque()
queue.append((x,y))
while queue:
x,y = queue.popleft()
if x == rx and y == ry:
break
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < n:
if distance[nx][ny] == 0:
distance[nx][ny] = distance[x][y] + 1
queue.append((nx,ny))
print(distance[rx][ry])
나이트 이동하는 방법이 주어진다 8가지 방법을 dx, dy에 넣어주고 distance 배열을 만들어 이동 거리를 계산해준다.
queue를 계속 돌다가 x,y가 rx, ry랑 같아지면 while문을 종료하고 도착지 distance[rx][ry]를 출력해주면 된다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 4963번, 섬의 개수 (Python) (0) | 2021.07.15 |
---|---|
[백준] 11057번, 오르막 수 (Python) (0) | 2021.07.14 |
[백준] 2636번, 치즈 (Python) (0) | 2021.07.08 |
[백준] 2468번, 안전영역 (Python) (0) | 2021.07.08 |
[백준] 2667번, 단지번호붙이기 (Python) (0) | 2021.07.08 |
댓글