Algorithm/DFS & BFS
[백준] 7562 나이트의 이동 (Python 파이썬)
안드선생
2021. 4. 6. 16:23
반응형
문제 설명
체스판 위의 나이트가 최소 몇번을 움직여 도착지까지 이동할 수 있는지를 구하는 문제이다.
풀이 과정
나이트가 이동할 수 있는 경로는 체스의 나이트와 똑같이 가로2칸 이동후 세로1칸 혹은 가로1칸 이동 후 세로1칸 이기 때문에 8가지 상황이 발생한다.
visited의 각 칸에는 그 칸까지 오는데 필요한 횟수가 저장되어 있으며 초기는 모두 0으로 저장되어 있다.
즉, 아직 밟지않은 칸은 모두 0으로 초기화를 해준 것이다.
단, 시작점은 이미 밟고있기 때문에 1로 표시를 해주며, 도착 칸에서 -1을 해줌으로써 해결할 수 있다.
from collections import deque
dx = [+2, +1, -1, -2, -2, -1, +1, +2]
dy = [+1, +2, +2, +1, -1, -2, -2, -1]
def bfs(a, b, c, d):
queue = deque()
queue.append((a, b))
while queue:
curX, curY = queue.popleft()
if curX == c and curY == d:
print(visited[curX][curY] - 1)
return True
for i in range(8):
nx = curX + dx[i]
ny = curY + dy[i]
if nx < 0 or nx >= l or ny < 0 or ny >= l:
continue
if visited[nx][ny] == 0:
visited[nx][ny] = visited[curX][curY] + 1
queue.append((nx, ny))
return False
n = int(input())
for i in range(n):
l = int(input())
visited = [[0] * l for _ in range(l)]
a, b = map(int, input().split())
c, d = map(int, input().split())
visited[a][b] = 1
bfs(a, b, c, d)
전체 문제 & 코드는 위의 깃에 정리되어 있습니다.
팔로우 & 맞팔은 환영입니다 !
반응형