알고리즘 문제풀이

백준 16953 A -> B Python 그래프 BFS 실버2

아크몽 2024. 3. 23. 21:24

실수 한 점:

1. 10의 9승까지 값을 받을 수 있기 때문에, 일반적인 bfs 풀이를 사용할 경우 메모리 오류가 뜬다.

2. 부분집합을 이용한 DFS 풀이처럼 문제를 풀이할 수 있다면 풀 수 있음을 인지했음, 하지만 이를 활용할 방법을 유연하게 생각하지 못함,

=> 인자로 cnt를 받아서 활용했으면 바로 풀이가 가능한 단계까지 풀이했었음

 

메모리 초과 풀이 

from collections import deque
def bfs(n,m):
    Q = deque()
    Q.append(n)
    visited[n] = 1
    while Q:
        v = Q.popleft()
        if v > m: continue
        if v==m:
            return visited[m]
        for w in [v*2,int(str(v)+'1')]:
            if 0< w <= m:# 백만 이하의 자연수
                if visited[w] ==0:
                    visited[w] = visited[v] + 1
                    Q.append(w)
    return -1

N,M = map(int,input().split())
visited = [0] * (M + 1)
print(bfs(N,M))

정답 풀이

from collections import deque

def bfs(n,m):
    Q = deque()
    Q.append((n,1))
    while Q:
        v,cnt = Q.popleft()
        if v > m: continue
        if v==m:
            return cnt
        Q.append((v*2, cnt + 1))
        Q.append((v*10 + 1, cnt + 1))
    return -1

N,M = map(int,input().split())
print(bfs(N,M))