알고리즘 공부

[백준 7562번] 나이트의 이동 python

gyk7 2024. 7. 22. 22:44

https://www.acmicpc.net/problem/7562

 

 

 

- 문제 유형 : 그래프 탐색

- 소요 시간 : 약 3시간 -> 앞으로 줄여야 함.

- 어려웠던 부분 : 이동 횟수를 구할 때 어떤 방식을 사용해야 하는지 감을 못 잡음.

나이트가 첫번째 칸에서 두번째 칸으로 이동할 때 1증가, 두번째 칸에서 세번째 칸으로 이동할 때 1증가시키는 방식으로

마지막 최종 칸에 써지는 숫자가 최소 이동 횟수가 됨. (여기서 이미 숫자가 채워진 그래프 칸은 이동 횟수를 변경시키지 않기 위해 graph[nx][ny]== 0인지 따져보는 것)

 

[구현 코드]

from collections import deque

def bfs(x, y):
    q = deque()
    q.append((x, y))
   
    while q :
       
        x, y = q.popleft()
       
        if x == x2 and y == y2 :
            return graph[x2][y2]
       
        for k in range(8):
            nx = x + dx[k]
            ny = y + dy[k]
            if 0 <= nx < I and 0 <= ny < I and graph[nx][ny] == 0:
                graph[nx][ny] = graph[x][y] + 1
                q.append((nx,ny))
                # print(q)
 
test_case = int(input())
for i in range(1, test_case + 1) :
    I = int(input())
    x1, y1 = map(int, input().split())
    x2, y2 = map(int, input().split())
   
    graph = [[0] * I for _ in range(I)]
    graph[x1][y1] = 0
   
    dx = [2,2,1,1,-2,-2,-1,-1]
    dy = [1,-1,2,-2,1,-1,2,-2]
   
    print(bfs(x1, y1))    

'알고리즘 공부' 카테고리의 다른 글

[백준 2563번] 색종이 python  (0) 2024.08.01
[programmers] 타겟 넘버  (0) 2024.07.24
[백준 2583번] 영역 구하기 python  (0) 2024.07.23
[백준 11403번] 경로 찾기 python  (4) 2024.07.23
DFS, BFS 알고리즘 정리  (1) 2024.07.22