백준 7562 나이트의 이동 (실버2)

김준오·2021년 7월 3일
0

알고리즘

목록 보기
12/91
post-thumbnail

백준 7562 나이트의이동

나이트가 이동할수 있는 케이스를 BFS로 접근했다.
일반적인 좌우상하로 움직이는 미로찾기와 유사하지만,
이동경로가 좌우상하가 아닌 설명에있는 나이트의 움직임대로만 바꿔서 처리해주면 될것같다.

내풀이

from collections import deque

n = int(input())

for _ in range(n):
  l = int(input())
  visited = [[0]*l for _ in range(l)]
  start = tuple(map(int,input().split()))
  end = tuple(map(int,input().split()))

  if start == end:
    print(0)
    continue

  x = [2,1,-1,-2,-2,-1,1,2]
  y = [1,2,2,1,-1,-2,-2,-1]

  need_visit = deque()
  need_visit.append(start)



  while(need_visit):
    breaker = False
    node = need_visit.popleft()
    for i in range(8):
      nx = node[0] + x[i]
      ny = node[1] + y[i]

      if (nx <0 or nx >=l or ny <0 or ny >=l or visited[nx][ny] != 0):
        continue

      visited[nx][ny] = visited[node[0]][node[1]] + 1
      need_visit.append((nx,ny))

      if nx == end[0] and ny == end[1]:
        print(visited[nx][ny])
        breaker = True
        break
    
    if breaker == True:
      break

회고

별도의 함수 없이 짜다보니 탐색이 끝난순간 for문과 while문을 다 빠져나가려고 짜다보니 breaker라는 변수를 만들어서 바깓쪽 while문을 빠져나가게 만들었다.

결과

profile
jooooon

0개의 댓글

관련 채용 정보