문제
16948번: 데스 나이트
게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다. 크
www.acmicpc.net
알고리즘
- bfs 탐색을 통해 문제를 수행한다.
- 6가지 이동 방법을 정의하고 반복문을 통해 현재 위치에서 6가지 방법으로 이동한다.
- 범위 내에 있고 탐색하지 않았다면 이동후 좌표를 탐색한다.
- 탐색한 좌표까지 걸린 이동 횟수를 초기화한다.
- 목표 좌표까지 이동한 횟수에서 처음 시작 좌표에서 카운트한 값을 빼고 출력한다.
코드
import sys
from collections import deque
# bfs 탐색
def bfs():
queue = deque()
queue.append([r1, c1])
visited[r1][c1] = 1
while queue:
a, b = queue.popleft()
# 6가지 이동 방법을 확인한다.
for i in range(6):
x = a + dx[i]
y = b + dy[i]
# 범위 내에 있고 탐색하지 않았다면 탐색한다.
if 0 <= x < n and 0 <= y < n and visited[x][y] == 0:
# 탐색하기까지 걸린 이동 횟수를 초기화
visited[x][y] = visited[a][b] + 1
queue.append((x, y))
n = int(sys.stdin.readline())
r1, c1, r2, c2 = map(int, sys.stdin.readline().split())
dx = [-2, -2, 0, 0, 2, 2]
dy = [-1, 1, -2, 2, -1, 1]
# 각 좌표까지 가기 위한 이동 횟수 체크
visited = [[0] * n for _ in range(n)]
bfs()
# 목표 좌표까지 이동한 횟수에서
# 처음 시작 좌표에서 카운트한 값을 빼준다.
print(visited[r2][c2] - 1)
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 18405번(파이썬): 경제적 전염 (0) | 2021.08.19 |
---|---|
[baekjoon] 백준 14716번(파이썬): 현수막 (0) | 2021.08.18 |
[baekjoon] 백준 16928번(파이썬): 뱀과 사다리 게임 (0) | 2021.08.16 |
[baekjoon] 백준 16918번(파이썬): 봄버맨 (0) | 2021.08.15 |
[baekjoon] 백준 12852번(파이썬): 1로 만들기 2 (0) | 2021.08.14 |