코테 노트/백준

백준 7562 나이트의 이동 Python 3

화요밍 2022. 2. 10. 16:23
728x90
반응형

https://www.acmicpc.net/problem/7562

 

7562번: 나이트의 이동

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

www.acmicpc.net

 

최종 코드

 

GitHub - hwayeon351/BEAKJOON-Algorithms: 백준 알고리즘 소스 코드 모음

백준 알고리즘 소스 코드 모음. Contribute to hwayeon351/BEAKJOON-Algorithms development by creating an account on GitHub.

github.com

import sys
from collections import deque
def bfs(sx, sy, ex, ey):
    visit = [[0]*I for _ in range(I)]
    q = deque([[sx, sy, 0]])
    visit[sy][sx] = 1
    while q:
        x, y, cnt = q.popleft()
        if x == ex and y == ey:
            print(cnt)
            return
        for ddx, ddy in zip(dx, dy):
            nx, ny = x+ddx, y+ddy
            if 0 <= nx < I and 0 <= ny < I and not visit[ny][nx]:
                visit[ny][nx] = 1
                q.append([nx, ny, cnt+1])
input = sys.stdin.readline
T = int(input())
dx = [-2, -1, 1, 2, -2, -1, 1, 2]
dy = [-1, -2, -2, -1, 1, 2, 2, 1]
for _ in range(T):
    I = int(input())
    sx, sy = map(int, input().split())
    ex, ey = map(int, input().split())
    bfs(sx, sy, ex, ey)

풀이 과정

풀이 시간 18분

import sys
from collections import deque

def bfs(sx, sy, ex, ey):
	#체스판의 칸 방문처리
    visit = [[0]*I for _ in range(I)]
    q = deque([[sx, sy, 0]])
    visit[sy][sx] = 1
    
    while q:
        x, y, cnt = q.popleft()
        
        #목적지에 도착한 경우, 이동 횟수 출력하고 함수 종료
        if x == ex and y == ey:
            print(cnt)
            return
            
        #이동할 8가지 방향 탐색
        for ddx, ddy in zip(dx, dy):
            nx, ny = x+ddx, y+ddy
            #이전에 방문하지 않은 칸이라면, 방문하고 큐에 삽입한다
            if 0 <= nx < I and 0 <= ny < I and not visit[ny][nx]:
                visit[ny][nx] = 1
                q.append([nx, ny, cnt+1])
                
input = sys.stdin.readline
T = int(input())

#나이트의 이동
dx = [-2, -1, 1, 2, -2, -1, 1, 2]
dy = [-1, -2, -2, -1, 1, 2, 2, 1]

for _ in range(T):
    I = int(input())
    sx, sy = map(int, input().split())
    ex, ey = map(int, input().split())
    bfs(sx, sy, ex, ey)

 

728x90
반응형

'코테 노트 > 백준' 카테고리의 다른 글

백준 1743 음식물 피하기 Python 3  (0) 2022.02.14
백준 2583 영역 구하기 Python 3  (0) 2022.02.13
백준 2644 촌수계산 Python 3  (0) 2022.02.10
백준 1525 퍼즐 Python 3  (0) 2022.02.10
백준 1039 교환 Python 3  (0) 2022.02.09