[백준] 7562번 나이트의 이동 - 파이썬

2022. 2. 19. 21:50·알고리즘 공부/BFS & DFS

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

 

7562번: 나이트의 이동

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

www.acmicpc.net

import sys
from collections import deque
# 나이트가 움직일 수 있는 모든 경우의 수
move = [[1,2],[1,-2],[-1,2],[-1,-2],[2,1],[2,-1],[-2,1],[-2,-1]]

# bfs 시작
def bfs(x, y,target_x,target_y):
    # 만약의 현재 위치와 목표 위치가 같으면 0을 리턴
    if x == target_x and y == target_y:
        return 0
    # bfs를 해주기위해 큐를 만든다.
    now_state = deque()
    # 큐에 현재 나이트가 위치한 좌표를 넣어준다
    now_state.append([x,y])
    # 이제 while문을 돌면서 큐에 들어있는 나이트의 위치들을 꺼낸다.
    while now_state:
        a, b = now_state.popleft()
        # 만약에 큐에서 나온 나이트의 위치와 목표 위치가 같다면 그자리의 값을 리턴해준다.
        if a == target_x and b == target_y:
            return chess[target_x][target_y]
        # 이제 for문을 위의 move 리스트의 길이만큼 나이트를 움직여준다.
        for i in range(8):
            # 위에 큐에서 나온 a,b를 이제 움직여서 nx,ny에 저장해준다.
            nx = a + move[i][0]
            ny = b + move[i][1]
            # 이동한 위치가 체스판 밖을 나가지 않고 이동한 체스판이 지금까지 방문을 한번도 하지 않았다면
            if -1 < nx < l and -1 < ny < l and chess[nx][ny] ==0:
                # 그위치의 값에 1을 더해주고
                chess[nx][ny] = chess[a][b] + 1
                # 나이트의 위치를 큐에 넣어준다.
                now_state.append([nx, ny])

n = int(sys.stdin.readline())

for i in range(n):
    l = int(sys.stdin.readline())
    chess = [[0] * l for _ in range(l)]
    x, y = map(int,sys.stdin.readline().split())
    target_x,target_y =map(int,sys.stdin.readline().split())
    print(bfs(x, y,target_x,target_y))

bfs를 잘알고 있다면 풀만한 문제이다.

반응형

'알고리즘 공부 > BFS & DFS' 카테고리의 다른 글

[백준] 14502번 연구소- 파이썬  (0) 2022.03.26
[백준] 7569번 토마토 - 파이썬  (0) 2022.02.22
[백준] 7576번 토마토 - 파이썬  (0) 2022.02.19
[백준] 2178번 미로 탐색 - 파이썬  (0) 2021.08.18
[백준] 1012번 유기농 배추 - 파이썬  (0) 2021.08.18
'알고리즘 공부/BFS & DFS' 카테고리의 다른 글
  • [백준] 14502번 연구소- 파이썬
  • [백준] 7569번 토마토 - 파이썬
  • [백준] 7576번 토마토 - 파이썬
  • [백준] 2178번 미로 탐색 - 파이썬
코딩 코딩 코오딩
코딩 코딩 코오딩
  • 코딩 코딩 코오딩
    코딩하는 누누
    코딩 코딩 코오딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (491)
      • 생산성 (2)
        • 인텔리제이 (2)
      • 프로젝트 기록 (14)
        • git (2)
        • spring (3)
        • TestCode (2)
        • spring security (3)
        • 기타 (2)
        • MySQL (0)
        • Cloud (2)
      • 회고 (4)
      • Spring (6)
      • JPA (0)
      • DB (4)
        • MySql (2)
        • Redis (1)
      • Java (7)
        • JSP (1)
      • 잡담 (1)
      • CS (30)
        • 컴퓨팅 사고 (0)
        • 배열 (4)
        • 알고리즘 (8)
        • 메모리 (7)
        • 자료구조 (9)
        • 암호학 (2)
      • opencv (14)
      • AI (56)
        • 머신러닝 (2)
        • 딥러닝 (7)
        • tensorflow (3)
        • 머신러닝(딥러닝) 정리 (21)
        • 강화학습 (7)
        • 논문 읽기 (1)
        • 잡동사니 (1)
        • python AI (13)
        • 선형대수 (1)
        • 확률론 (0)
      • 알고리즘 공부 (177)
        • 그래프 이론 (0)
        • 다익스트라 (4)
        • 위상정렬 (3)
        • 신장트리-크루스칼 알고리즘 (4)
        • 플로이드 워셜 (3)
        • 이진탐색 (9)
        • 백트래킹 (11)
        • 부르드포스 (9)
        • 다이나믹 프로그래밍 (20)
        • BFS & DFS (24)
        • 그리디 (6)
        • 구현 (15)
        • 정렬 (3)
        • 기타 (62)
        • 수학? (1)
      • 코딩 (173)
        • 파이썬(python) (15)
        • c언어 (13)
        • 프로그래머스 lv1 (46)
        • 프로그래머스 lv2 (41)
        • 백준 - c++ (49)
        • Softeer (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    n진법 변환
    알고리즘
    DFS
    c언어
    백준
    if문
    큐
    코딩문제
    코딩테스트
    선택정렬
    코딩기초
    왜곡보정
    코딩
    이미지처리
    정렬
    인접행렬
    캘리브레이션
    순차 탐색
    C언어 기초
    코딩기초스킬
    인접리스트
    프로그래머스
    다이나믹 프로그래밍
    삽입 정렬
    에라토슽네스의 체
    자료구조
    BFS
    소수찾기
    스택
    그리디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩 코딩 코오딩
[백준] 7562번 나이트의 이동 - 파이썬
상단으로

티스토리툴바