Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 12865
- 1759
- 파이팅
- 디자인패턴
- 해커랭크
- CS
- 1302
- 파이썬
- 1766
- 알고리즘
- level3
- python #7490 #백준 #알고리즘 #BFS
- 백준
- Python
- 프로그래머스
- REST API
- 2941
- 올바른 괄호
- 안드로이드
- BFS
- MVC
- deque
- 1715
- Algorithm
- 1697
- 라이징프로그래머2 #Android #안드로이드 #Quitter #MakeUs
- AOS
- Heap
- 최소힙
- 백준 #알고리즘 # Algorithm #파이썬
Archives
Liam 일지
백준 7562번 나이트의 이동(python) 본문
728x90
문제
체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까?

입력
입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다.
각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. 체스판의 각 칸은 두 수의 쌍 {0, ..., l-1} × {0, ..., l-1}로 나타낼 수 있다. 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다.
출력
각 테스트 케이스마다 나이트가 최소 몇 번만에 이동할 수 있는지 출력한다.
문제설명
문제에서 주어진 나이트의 이동방향을 dx,dy로 리스트의 형태로 나타냅니다.
그리고 deque라이브러리를 이용하여 현재의 위치와 이동방향을 더하여 새로운 좌표를 얻은 후 이동할 수 있는 위치인지 확인한 뒤 이동이 가능하면 그 좌표에 이동한 카운트인 1을 더해줍니다.
이 과정을 반복한 뒤에 현재 좌표가 목표위치와 같으면 그 위치의 카운트를 반환해줍니다.
시작 위치를 1로 시작하였기때문에 최종 위치에서 1을 빼줘야합니다.
from collections import deque
dx = [-2, -1, 1, 2, 2, 1, -1, -2]
dy = [1, 2, 2, 1, -1, -2, -2, -1]
def solve(x, y, x2, y2):
q = deque()
q.append((x, y))
board[x][y] = 1
while q:
cx, cy = q.popleft()
if cx == x2 and cy == y2:
print(board[x2][y2] - 1)
return
for i in range(8):
nx = cx + dx[i]
ny = cy + dy[i]
if 0 <= nx < n and 0 <= ny < n and board[nx][ny]==0:
board[nx][ny] = board[cx][cy] + 1
q.append((nx, ny))
T = int(input())
for _ in range(T):
n = int(input())
result = 0
board = [[0] * n for i in range(n)]
x, y = map(int, input().split()) # 나이트의 현재위치
x2, y2 = map(int, input().split()) # 가고자하는 위치
solve(x, y, x2, y2)
'Algorithm(백준)' 카테고리의 다른 글
| 백준 1927번 최소 힙 (python) (0) | 2021.04.23 |
|---|---|
| 백준 1991번 트리순회(python) (0) | 2021.04.23 |
| 백준 1939번 중량제한 (0) | 2021.04.22 |
| 백준 1302번 베스트셀러 (0) | 2021.04.21 |
| 백준 7490번: 0만들기(BFS, 재귀함수) (0) | 2021.04.20 |