πŸ—οΈ Algorithm/🟩 λ°±μ€€

🟩 [λ°±μ€€] [Python] 13549번_μˆ¨λ°”κΌ­μ§ˆ 3

Dbswnstjd 2022. 12. 17. 08:56

문제

https://www.acmicpc.net/problem/13549

 

13549번: μˆ¨λ°”κΌ­μ§ˆ 3

μˆ˜λΉˆμ΄λŠ” 동생과 μˆ¨λ°”κΌ­μ§ˆμ„ ν•˜κ³  μžˆλ‹€. μˆ˜λΉˆμ΄λŠ” ν˜„μž¬ 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 μžˆλ‹€. μˆ˜λΉˆμ΄λŠ” κ±·κ±°λ‚˜ μˆœκ°„μ΄λ™μ„ ν•  수 μžˆλ‹€. λ§Œμ•½, 수빈이의 μœ„μΉ˜κ°€ X일

www.acmicpc.net

풀이

# λ°±μ€€ 13549번 문제 - μˆ¨λ°”κΌ­μ§ˆ 3
from collections import deque

# 0 - 1 bfs 탐색
def bfs():
    graph = [-1] * 100001
    graph[n] = 0
    queue = deque([n])

    while queue:
        target = queue.popleft()

        # λ™μƒμ˜ μœ„μΉ˜μ— λ„λ‹¬ν–ˆλ‹€λ©΄ 리턴
        if target == k:
            return graph[target]

        # λ°˜λ³΅λ¬Έμ„ 톡해 3가지 μ΄λ™μ˜ 경우λ₯Ό 확인
        for i in (target + 1, target - 1, target * 2):

            # μ΄λ™ν•˜λŠ” 곳이 λ²”μœ„ 내에 있고 μ΄λ™ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ 이동
            if 0 <= i <= 100000 and graph[i] == -1:
                # μˆœκ°„μ΄λ™μ΄λΌλ©΄
                if i == target * 2:
                    graph[i] = graph[target] # 0초 κ°±μ‹ 
                    queue.appendleft(i) # μˆœκ°„μ΄λ™μ΄κΈ°μ— λ¨Όμ € 탐색

                else:
                    graph[i] = graph[target] + 1
                    queue.append(i)



n, k = map(int, input().split())
print(bfs())