https://www.acmicp.net/problem/16948
from collections import deque
n = int(input())
a = [[False] * (n + 1) for _ in range(n + 1)]
r1, c1, r2, c2 = map(int, input().split())
dx = [-2, -2, 0, 0, 2, 2]
dy = [-1, 1, -2, 2, -1, 1]
queue = deque()
queue.append((r1, c1, 0))
while queue:
x, y, count = queue.popleft()
a[x][y] = True
if (x, y) == (r2, c2):
print(count)
exit()
for i in range(6):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < n and 0 <= ny < n and not a[nx][ny]:
queue.append((nx, ny, count + 1))
a[nx][ny] = True
print(-1)
이동경로가 많아졌을 뿐, bfs의 큰 틀에서 벗어나진 않은 문제.
count 가중치를 같이 queue에 넣고 돌려 목표점에 도달했을 때 count를 반환해주면 됨.
반환에 실패했을 경우 -1 출력.
'백준 알고리즘 (Baekjoon Algorithm)' 카테고리의 다른 글
[파이썬] 백준 알고리즘 No.16946 벽 부수고 이동하기 4 (0) | 2022.01.28 |
---|---|
[파이썬] 백준 알고리즘 No.14502 연구소 (0) | 2022.01.26 |
[파이썬] 백준 알고리즘 No.16928 뱀과 사다리 게임 (0) | 2022.01.26 |
[파이썬] 백준 알고리즘 No.3187 양치기 꿍 (0) | 2022.01.24 |
[파이썬] 백준 알고리즘 No.9663 N-Queen (0) | 2022.01.24 |