반응형
문제 설명
입출력 예제
풀이 코드
전형적인 bfs (너비 우선 탐색) 문제 이지만 딱 한가지 다른점이 있다.
바로 이동방향이다.
문제의 이동 방향을 보면 실제 체스의 나이트가 이동할 수 있는 것 처럼 대각선으로 2칸씩 8방향으로 움직인다.
나이트의 이동방향을 표현하면 다음과 같이 표현할 수 있다.
정답 코드
from collections import deque
import sys
input = sys.stdin.readline
dx = [1, 1, 2, 2, -1, -1, -2, -2]
dy = [-2, 2, -1, 1, -2, 2, -1, 1]
def bfs(x, y):
q = deque()
q.append((x, y))
while q:
x, y = q.popleft()
if x == ex and y == ey:
return chessmap[x][y]
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < l and 0 <= ny < l and chessmap[nx][ny] == 0:
q.append((nx, ny))
chessmap[nx][ny] = chessmap[x][y] + 1
for _ in range(int(input())): # 테스트 케이스
l = int(input()) # 한 변의 길이
chessmap = [[0] * l for _ in range(l)]
sx, sy = map(int, input().split()) # 시작지점 행, 열
ex, ey = map(int, input().split()) # 도착지점 행, 열
print(bfs(sx, sy))
'◼ 코딩테스트 > DFS,BFS' 카테고리의 다른 글
[Python/파이썬] 백준 1389 - 케인 베이컨의 6단계 법칙 (0) | 2023.05.25 |
---|---|
[Python/파이썬] 백준 16236 - 아기 상어 (0) | 2023.05.24 |
[Python/파이썬] 백준 7569 - 토마토 (1) | 2023.05.22 |
[Python/파이썬] 백준 14502 연구소 - (BFS + 백트래킹) (0) | 2023.05.22 |
[Python/파이썬] 백준 7576 - 토마토 (0) | 2023.05.21 |