PS/백준

[Python] 7562번 나이트의 이동

s_omi 2024. 8. 13. 10:21

✏️ 문제

 

문제 파악

최소 이동 거리를 구하므로 BFS를 사용해야 한다.

또한 나이트는 8가지 방법으로 움직일 수 있으므로 다음과 같이 방향 배열을 구성했다.

d = [(-2, -1), (2, -1), (-2, 1), (2, 1), (-1, -2), (-1, 2), (1, -2), (1, 2)]

 

x, y 좌표를 deque에 넣을 땐 "q = deque([(x, y)])" 라는 걸 알고 있자!

 

알고리즘

  • 그래프 이론
  • 그래프 탐색
  • 너비 우선 탐색

 

 

코드

from collections import deque
import sys
input = sys.stdin.readline

for _ in range(int(input())):
  l = int(input())
  visited = [[0] * l for __ in range(l)]
  d = [(-2, -1), (2, -1), (-2, 1), (2, 1), (-1, -2), (-1, 2), (1, -2), (1, 2)]
  start_x, start_y = map(int, input().split())
  goal_x, goal_y = map(int, input().split())

  def bfs(x, y):
    q = deque([(x, y)])
    visited[x][y] = 1

    while q:
      node_x, node_y = q.popleft()

      for i in range(8):
        dx = node_x + d[i][0]
        dy = node_y + d[i][1]

        if 0 <= dx < l and 0 <= dy < l and visited[dx][dy] == 0:
          visited[dx][dy] = visited[node_x][node_y] + 1
          q.append((dx, dy))
      
      if node_x == goal_x and node_y == goal_y:
        break

  bfs(start_x, start_y)
  print(visited[goal_x][goal_y] - 1)

 

 

 


 

⭐️ DFS와 BFS에 대해서 아직 잘 모른다면?

 

[알고리즘] DFS와 BFS

DFS (깊이 우선 탐색) 와 BFS (너비 우선 탐색) ?그래프 탐색 알고리즘의 대표적인 예로 이 알고리즘들은 그래프, 트리, 네트워크 등의 자료구조를 탐색하는 데 사용한다. 그래프는 노드(정점)와 노

mi-dairy.tistory.com

 

 

 

 

 

 

'PS > 백준' 카테고리의 다른 글

[Python] 1325번 효율적인 해킹  (0) 2024.08.14
[Python] 2583번 영역 구하기  (0) 2024.08.13
[Python] 16953번 A → B  (2) 2024.08.13
[Python] 2644번 촌수계산  (0) 2024.08.13
[Python] 1389번 케빈 베이컨의 6단계 법칙  (0) 2024.08.13