프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 13549 숨바꼭질 3

중규리 2024. 1. 17. 19:09

🐸 문제 정보

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때

www.acmicpc.net

 

🤖 알고리즘

BFS

 

⏱️ 풀이 시간

38.02m

 

📝 풀이

BFS임에도 이렇게 오래 걸린 이유는.. 처음에 백트래킹으로 풀었고 + 순서에 따라 답이 달라지는거에 대해 고려하지 못했다.

생각해보면 단순한 BFS문제 같지만, 거리를 계산할 때 순서가 아래와 같아야한다.

  1. *2
    • 시간이 늘어나지 않기 때문에 우선순위가 가장 높음
  2. -1
  3. +1

1번은 그렇다 쳐도, 2번 3번에 대한 해답은 질문 게시판을 뒤지다가 알아냈다!

 

 

글 읽기 - x + 1, x - 1 순서에 따라서 답이 달라지는 이유가 뭔가요?

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

🧑‍💻 나의 답

# pypy3

import sys
from collections import deque
input = sys.stdin.readline
INF = sys.maxsize
MAX = (10 ** 5) + 1

n, k = list(map(int, input().rstrip().split()))
visited = [False] * MAX
log = [INF] * MAX

q = deque([n])
log[n] = 0
while q:
    s = q.popleft()
    if s == k:
        break
    for ns, nl in [(2 * s, log[s]), (s - 1, log[s] + 1), (s + 1, log[s] + 1)]:
        if (0 <= ns < MAX) and (not visited[ns]) and (nl < log[ns]):
            log[ns] = nl
            visited[ns] = True
            q.append(ns)

print(log[k])

'PS > 문제풀이' 카테고리의 다른 글

백준 19637 IF문 좀 대신 써줘  (0) 2024.01.20
백준 1205 등수 구하기 Python  (0) 2024.01.20
백준 1446 지름길 Python  (0) 2024.01.17
백준 20310 타노스 Python  (0) 2024.01.17
백준 19941 햄버거 분배 Python  (0) 2024.01.17