코드

from collections import deque
T = int(input())

for i in range(T):
    n = int(input()) #체스판 길이

    # 체스판 입력
    graph = [[0 for _ in range(n)] for _ in range(n)]
    
    x1, y1 = map(int, input().split()) # 시작 점
    x2, y2 = map(int, input().split()) # 도착 점

    # BFS 구현
    def bfs(x1, y1):
        q = deque()
        q.append((x1, y1))

        # 시작 점 방문 처리
        graph[x1][y1] = 1

        # 나이트가 움직일 수 있는 방향을 표현
        dx = [1, 2, 1, 2, -1, -2, -1, -2]
        dy = [2, 1, -2, -1, 2, 1, -2, -1]

        while q:
            x, y = q.popleft()

            # 도착지에 도착한 경우 return
            if x == x2 and y == y2:
                print(graph[x2][y2] - 1)
                return

            for i in range(8):
                nx = x + dx[i]
                ny = y + dy[i]

                # 체스판을 벗어나지 않은 경우와
                # 방문하지 않은 경우에만 방문 처리
                if 0 <= nx < n and 0 <= ny < n and graph[nx][ny] == 0:
                    q.append((nx, ny))

                    # 이전 값에 +1 => 이동 횟수
                    graph[nx][ny] = graph[x][y] + 1
                
    bfs(x1, y1)                

문제 해설

BFS 문제.

미로 탐색과 매우 유사한 문제이다. 움직일 수 있는 값을 가르키는 dx, dy의 값만 정확하게 정해주어 문제를 풀면 미로 탐색과 별 차이 없이 쉽게 풀 수 있으므로 미로 탈출 문제로 설명을 대신하겠습니다!!!

댓글남기기