CS/알고리즘

백준 7562 나이트의 이동 파이썬 풀이

happy_life 2022. 4. 2. 22:09

문제

체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까?


정답코드

 

#나이트의 이동

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

#시계방향으로 돌리면서 체크

dx = [-1,-2,-2,-1,1,2,2,1]
dy = [-2,-1,1,2,2,1,-1,-2]

def BFS():
    queue = deque()
    x,y = present_location[0],present_location[1]
    queue.append([x,y])
    chess_place[x][y] = 1
    # for i in chess_place:
    #     print(i)
    while queue:
        x,y = queue.popleft()
        if(x ==purpose_location[0] and y == purpose_location[1]):
            print(chess_place[x][y] -1)
            return

        for i in range(8):
            nx = x + dx[i]
            ny = y + dy[i]
            if(0<= nx < size and 0<= ny < size):
                #방문 체크
                if(chess_place[nx][ny] == 0):
                    chess_place[nx][ny] = chess_place[x][y] + 1
                    queue.append([nx,ny])
            
        # print("------------")
        # for i in chess_place:
        #     print(i)


for i in range(T):
    
    size = int(input())
    chess_place = [[0] * size for _ in range(size)]
    
    

    present_location = list(map(int,input().split()))
    purpose_location = list(map(int,input().split()))

    BFS()

 

 

 

 

 

 

 

 

 

배운점 && 공부방향

 

1. 이차원 배열을 만들 땐 위의 방법을 사용해야한다.

chess_place = [[0] * size for _ in range(size)]

------------------------------------------------

chess = [0] * size

for i in range(size):
	chess_place.append(chess)

-> 아래와 위 모두 동일한 결과값을 내는데 왜 check[0][1] = 1 이런식으로 값을 낼 때 아래의 방법으로 만든것은 세로줄이 모두 변하는지 모르겠음...

 

 

2. 인덱스가 끝점인줄 알고 정답을 맞춰놓고  오류를 찾으려고 했음.

 -> 실수 유형 체크