문제
게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다.
크기가 N×N인 체스판과 두 칸 (r1, c1), (r2, c2)가 주어진다. 데스 나이트가 (r1, c1)에서 (r2, c2)로 이동하는 최소 이동 횟수를 구해보자. 체스판의 행과 열은 0번부터 시작한다.
데스 나이트는 체스판 밖으로 벗어날 수 없다.
입력
첫째 줄에 체스판의 크기 N(5 ≤ N ≤ 200)이 주어진다. 둘째 줄에 r1, c1, r2, c2가 주어진다.
출력
첫째 줄에 데스 나이트가 (r1, c1)에서 (r2, c2)로 이동하는 최소 이동 횟수를 출력한다. 이동할 수 없는 경우에는 -1을 출력한다.
예제
풀이
from collections import deque
n = int(input())
r1, c1, r2, c2 = map(int, input().split())
chess = [[0] * n for _ in range(n)]
dx = [-2,-2,0,0,2,2]
dy = [-1,1,-2,2,-1,1]
def bfs(x,y):
queue = deque()
queue.append((x,y))
while queue:
x,y = queue.popleft()
for i in range(6):
nx = x+dx[i]
ny = y+dy[i]
if 0 <= nx < n and 0 <= ny < n and chess[nx][ny] == 0:
chess[nx][ny] = chess[x][y] + 1
if nx==r2 and ny==c2:
return chess[nx][ny]
queue.append((nx, ny))
return -1
print(bfs(r1,c1))
'Algorithm' 카테고리의 다른 글
[백준/Python] 숫자 카드 (0) | 2021.10.09 |
---|---|
[백준/Python] 단지번호붙이기 (0) | 2021.10.09 |
[백준/Python] 숫자판 점프 (0) | 2021.10.05 |
[프로그래머스 Level2] H-Index (0) | 2021.10.04 |
[백준/Python] 회의실 배정 (0) | 2021.10.04 |