https://github.com/Dev-Guccin
Guccin
https://github.com/Dev-Guccin
전체 방문자
오늘
어제
  • 분류 전체보기 (172)
    • 알고리즘 (140)
    • 삽질방지 (13)
    • SystemHacking (1)
    • 일상 (4)
    • 개발 (8)
    • 스프링 부트 REST API 개발일지 (5)
    • JPA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DFS
  • 이분탐색
  • 파이썬
  • MST
  • 큐
  • heapq
  • 백준
  • counter
  • Python
  • 최단경로
  • LIS
  • 스택
  • python3
  • 재귀함수
  • 최대공약수
  • 다익스트라
  • 백트래킹
  • 프로그래머스
  • 그리디
  • 재귀
  • 다이나믹 프로그래밍
  • DP
  • 유니온 파인드
  • 이분 탐색
  • 최소힙
  • BFS
  • 12015
  • 그래프
  • 다이나믹프로그래밍
  • 유클리드호제법

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
https://github.com/Dev-Guccin

Guccin

백준 7562 python 풀이 (나이트의 이동, BFS, 그래프)
알고리즘

백준 7562 python 풀이 (나이트의 이동, BFS, 그래프)

2021. 7. 10. 16:51

문제는 나이트가 위와 같이 움직일 수 있을때 몇번 움직이면 원하는 목적지에 도달하는지 구하는 문제이다.

이전에 BFS문제와 아주 유사하다. 다만 그전에는 한칸씩 상하좌우로 움직였지만 이번에는 좀더 여러방면으로 움직이는 차이가 있다. 이때 가장 적은 움직임의 수를 구해야 하기 때문에 DFS가 아닌 BFS로 풀면 된다.

 

1. BFS를 구현

2. 좌표의 움직임을 구현

3. 이미 움직이거나 움직일 곳은 표시하여 중복을 제거

 

이를 토대로 코드를 구현하면 아래와 같다.

from collections import deque
T = int(input())

def BFS(l, start, end):
    M = [[0 for i in range(l)] for i in range(l)]
    M[start[0]][start[1]] = 1
    q = deque([start])

    dx = [-1,-2,-2,-1,1,2,2,1] # 행
    dy = [-2,-1,1,2,2,1,-1,-2] # 열
    time = -1
    while q:
        time+=1
        for i in range(len(q)):#개수만큼 반복
            x,y =  q.popleft()
            if [x,y] == end:
                return time
            for i in range(8):
                nx = x + dx[i]
                ny = y + dy[i]
                if (0<=nx<l) and (0<=ny<l) and (M[nx][ny]==0):
                    M[nx][ny] = 1
                    q.append([nx,ny])
    
for _ in range(T):
    l = int(input())
    start = list(map(int, input().split()))
    end = list(map(int, input().split()))
    print(BFS(l, start, end))

이전 BFS와 유사한 점이 많다 보니 큰 어려움 없이 풀 수 있었다.

'알고리즘' 카테고리의 다른 글

백준 2206 파이썬 풀이 (BFS, 벽 부수고 이동하기, 이차 배열 사용)  (0) 2021.07.12
백준 1707 python 풀이 (이분 그래프, BFS)  (0) 2021.07.11
백준 7569 토마토 (BFS, 3차원)  (0) 2021.07.09
백준 1697 숨바꼭질 (BFS)  (0) 2021.05.18
백준 7576 토마토 (BFS, 행렬 그래프, python)  (0) 2021.05.05
    '알고리즘' 카테고리의 다른 글
    • 백준 2206 파이썬 풀이 (BFS, 벽 부수고 이동하기, 이차 배열 사용)
    • 백준 1707 python 풀이 (이분 그래프, BFS)
    • 백준 7569 토마토 (BFS, 3차원)
    • 백준 1697 숨바꼭질 (BFS)
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin

    티스토리툴바