반응형
백준 7562번 나이트의 이동 문제입니다.
https://www.acmicpc.net/problem/7562
7562번: 나이트의 이동
체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수
www.acmicpc.net
입력 예제입니다.
첫째 줄은 테스트 케이스의 개수
그 다음 줄은 하나의 테스트 케이스로
체스판의 크기, 현재 있는 칸, 목적지 이렇게 주어집니다.
3
8
0 0
7 0
100
0 0
30 50
10
1 1
1 1
출력 예제입니다.
5
28
0
나이트의 8번의 이동을 bfs로 구현해서 풀었습니다.
나이트는 (2, 1), (1, 2), (-2, 1), (-1, 2), (2, -1), (1, -2), (-2, -1), (-1, -2) 이렇게 움직이며
체스판을 넘어가면 안됩니다.
sys.stdin.readlind() 으로 풀어야 시간초과가 나지 않습니다.
from collections import deque
import sys
n = int(sys.stdin.readline())
dx = [2, 1, -2, -1, 2, 1, -2, -1]
dy = [1, 2, 1, 2, -1, -2, -1, -2]
def bfs(x, y):
queue = deque()
queue.append((x, y))
li[x][y] = 1 #시작할 때 1로 초기화 했기 때문에
while queue:
x, y = queue.popleft()
for i in range(8):
nx, ny = dx[i] + x, dy[i] + y
if nx < 0 or nx >= m or ny < 0 or ny >= m:
continue
if li[nx][ny] == 0:
li[nx][ny] = li[x][y] + 1
queue.append((nx, ny))
for i in range(n):
m = int(sys.stdin.readline())
li = [[0] * m for _ in range(m)]
a, b = map(int, sys.stdin.readline().split())
a1, b1 = map(int, sys.stdin.readline().split())
bfs(a, b)
print(li[a1][b1] - 1) #여기서 -1을 해줘야함
input()으로 풀면 시간초과가 납니다.
반응형
'🔑알고리즘 > baekjoon' 카테고리의 다른 글
백준 1303 : 전투 파이썬 문제 풀이(bfs 알고리즘 사용) (0) | 2022.08.24 |
---|---|
백준 1012 : 유기농 배추 파이썬 풀이(bfs 알고리즘) (0) | 2022.08.21 |
백준 2606번 : 바이러스 python 문제 풀이 (bfs 알고리즘) (0) | 2022.08.18 |
백준 16435 : 스네이크 버드 파이썬 정답 풀이 (0) | 2022.08.04 |
백준 10974 : 모든 순열 파이썬 정답 풀이 (0) | 2022.08.03 |