πŸ“š Study/Baekjoon

[Silver I] 1697- μˆ¨λ°”κΌ­μ§ˆ

윰갱 2025. 4. 10. 16:26

문제

μˆ˜λΉˆμ΄λŠ” 동생과 μˆ¨λ°”κΌ­μ§ˆμ„ ν•˜κ³  μžˆλ‹€. μˆ˜λΉˆμ΄λŠ” ν˜„μž¬ 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 μžˆλ‹€. μˆ˜λΉˆμ΄λŠ” κ±·κ±°λ‚˜ μˆœκ°„μ΄λ™μ„ ν•  수 μžˆλ‹€. λ§Œμ•½, 수빈이의 μœ„μΉ˜κ°€ X일 λ•Œ κ±·λŠ”λ‹€λ©΄ 1초 후에 X-1 λ˜λŠ” X+1둜 μ΄λ™ν•˜κ²Œ λœλ‹€. μˆœκ°„μ΄λ™μ„ ν•˜λŠ” κ²½μš°μ—λŠ” 1초 후에 2*X의 μœ„μΉ˜λ‘œ μ΄λ™ν•˜κ²Œ λœλ‹€.

μˆ˜λΉˆμ΄μ™€ λ™μƒμ˜ μœ„μΉ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μˆ˜λΉˆμ΄κ°€ 동생을 찾을 수 μžˆλŠ” κ°€μž₯ λΉ λ₯Έ μ‹œκ°„μ΄ λͺ‡ 초 후인지 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫 번째 쀄에 μˆ˜λΉˆμ΄κ°€ μžˆλŠ” μœ„μΉ˜ Nκ³Ό 동생이 μžˆλŠ” μœ„μΉ˜ Kκ°€ μ£Όμ–΄μ§„λ‹€. Nκ³Ό KλŠ” μ •μˆ˜μ΄λ‹€.

좜λ ₯

μˆ˜λΉˆμ΄κ°€ 동생을 μ°ΎλŠ” κ°€μž₯ λΉ λ₯Έ μ‹œκ°„μ„ 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯ 1 λ³΅μ‚¬

5 17

예제 좜λ ₯ 1 λ³΅μ‚¬

4

# 풀이 방법

μ΅œλ‹¨μ‹œκ°„ 문제이기 λ•Œλ¬Έμ— bfsμ ‘κ·Ό

λ©”λͺ¨λ¦¬κ°€ λ„ˆλ¬΄ 많이 μž‘μ•„λ¨ΉλŠ”κ±° μ•„λ‹Œκ°€ 싢기도 ν•˜λ‹Ή..

λ‹€μ΅μŠ€νŠΈλΌλ‘œλ„ ν’€ 수 μžˆλ‹€κ³  좔후에 배움

 

dist 배열을 λ– μ˜¬λ¦¬μ§€ λͺ»ν•΄μ„œ 였래 κ±Έλ Έλ‹€.. μ΄λ ‡κ²Œ ν™•μž₯ν•΄κ°ˆ λ•ŒλŠ” μ΅œλ‹¨κ±°λ¦¬λ₯Ό λ°”λ‘œ κ΅¬ν•΄λ²„λ¦¬λŠ”κ²Œ μ’‹μ§€


# μ½”λ“œ

#  2025-04-01 15:35-16:10
import sys
from collections import deque
# sys.stdin = open("input.txt","r")

MAX = 100_000
n, k = map(int, sys.stdin.readline().split())
dist = [0] * (MAX+1)

def bfs(x):
    queue = deque()
    queue.append(x)

    while queue:
        x = queue.popleft()
        if x == k:
            print(dist[k])
            return
        directions = [x-1,x+1,2*x]
        for d in directions:
            if 0 <= d <= MAX and dist[d]==0:
                dist[d] = dist[x] + 1
                queue.append(d)
bfs(n)