백준 문제 링크
데스 나이트
- BFS를 사용했다.
- dx와 dy를 6방향으로 설정해야한다.
- 처음 시작을 1로 한 후, 갈 수 있는 방향에 이전 숫자 + 1을 넣어주었다.
- 목표 지점에 도달하면 lst[x][y] - 1을 반환한다.
- 목표 지점에 도달하지 못하면 -1을 반환한다.
from collections import deque
N = int(input())
lst = [[0]* N for _ in range(N)]
start_x, start_y, end_x, end_y = map(int, input().split())
dx = [2,2,-2,-2,0,0]
dy = [-1,1,-1,1,-2,2]
def bfs(x,y):
queue = deque()
queue.append((x,y))
lst[y][x] = 1
while queue:
x,y = queue.popleft()
if (x,y) == (end_x, end_y):
return lst[y][x] - 1
for d in range(6):
nx = x + dx[d]
ny = y + dy[d]
if (0<=nx<N) and (0<=ny<N) and lst[ny][nx] == 0:
lst[ny][nx] = lst[y][x] + 1
queue.append((nx,ny))
return -1
print(bfs(start_x, start_y))