문제
체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까?
정답코드
#나이트의 이동
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. 인덱스가 끝점인줄 알고 정답을 맞춰놓고 오류를 찾으려고 했음.
-> 실수 유형 체크
'CS > 알고리즘' 카테고리의 다른 글
백준 4949 균형 잡힌 세상 파이썬 풀이 (0) | 2022.04.05 |
---|---|
백준 1707번 이분 그래프 파이썬 풀이 (0) | 2022.04.04 |
파이썬 1697번 숨바꼭질 파이썬 풀이 (0) | 2022.04.01 |
파이썬 7569번 토마토 파이썬 풀이 (0) | 2022.03.31 |
카카오 코테 2020 Lv2 문자열 압축 파이썬 풀이 (0) | 2022.03.28 |