백준 1697 숨바꼭질

김민영·2022년 12월 28일
0

알고리즘

목록 보기
7/125

숨바꼭질

계획

  • BFS로 풀어야 할 것 같았음.
import sys
from collections import deque

N, K = map(int, input().split())

visited = [False for _ in range(100001)]

def bfs(start, end):
    queue = deque([[start, 0]])
    while queue:
        v = queue.popleft()
        if v[0] == end:
            return v[1]
        if visited[v[0]] or v[0] < 0 or v[0] > 100000:
            continue
        else:
            visited[v[0]] = 1
            if v[0] < 100000:
                queue.append([v[0] + 1, v[1] + 1])
            if v[0] >= 0:
                queue.append([v[0] - 1, v[1] + 1])
            if v[0] % 2 == 0:
                queue.append([v[0] // 2, v[1] + 1])
print(bfs(K, N))
  • BFS로 풀어야 할 것 같아서 풀다가 아닌가 해서 DFS로 풀다가 진짜 아닌거 같아서 BFS로 풀게 됨
  • 횟수 표현하는게 더 좋은 방법이 있을 것 같은데..
  • 무작정 BFS 했더니 계속 메모리 초과가 떠서 최대한 계산을 줄이기로 머리를 씀
  • 방문했던 곳에 대한 가지는 이미 큐에 들어가있을 것이므로 추가하지 않음.
  • 처음에는 시작 위치부터 끝 위치를 찾아가는 방식으로 했는데, 끝에서 시작 위치를 찾아가면 홀수인 경우를 제할 수 있어서 방식을 바꿈
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글