[백준] 7562번 나이트의 이동

[백준] 7562번 나이트의 이동

출처: [백준] 7562번 나이트의 이동


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 256 MB 25244 12068 9035 46.974%

문제

체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까?

img


입력

입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다.

각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. 체스판의 각 칸은 두 수의 쌍 {0, …, l-1} × {0, …, l-1}로 나타낼 수 있다. 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다.


출력

각 테스트 케이스마다 나이트가 최소 몇 번만에 이동할 수 있는지 출력한다.


예제 입력 1

1
2
3
4
5
6
7
8
9
10
3
8
0 0
7 0
100
0 0
30 50
10
1 1
1 1

예제 출력 1

1
2
3
5
28
0

출처


링크


알고리즘 분류


소스코드

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
import sys
from collections import deque

input = sys.stdin.readline

T = int(input())

# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2, -1), (-2, 1), (2, -1), (2, 1), (-1, -2), (-1, 2), (1, -2), (1, 2)]


def BFS(graph, start):
queue = deque([start])

while queue:
# 큐에서 하나의 원소를 뽑아 출력하기
r, c = queue.popleft()
if r == target_row and c == target_column:
return graph[r][c]
for step in steps:
# 이동하고자 하는 위치 확인
next_row = r + step[0]
next_col = c + step[1]
# 해당 위치로 이동이 가능하다면 카운트 증가
if 0 <= next_row < I and 0 <= next_col < I and graph[next_row][next_col] == 0:
graph[next_row][next_col] = graph[r][c] + 1
queue.append((next_row, next_col))


for _ in range(T):
I = int(input())
chess_board = [[0] * (I + 1) for _ in range(I + 1)]

row, column = map(int, input().split())
target_row, target_column = map(int, input().split())
result = BFS(chess_board, (row, column))
print(result)

[백준] 7562번 나이트의 이동

https://devch.co.kr/2021/05/19/BAEKJOON-7562-21-05-19/

Author

Chaehyeon Lee

Posted on

2021-05-19

Updated on

2021-05-24

Licensed under

댓글