실수 한 점:
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))
'알고리즘 문제풀이' 카테고리의 다른 글
백준15654 N과M (5) Python 백트래킹 실버 3 (0) | 2024.03.25 |
---|---|
백준 2164 카드 2 Python 자료구조 큐 실버4 (0) | 2024.03.24 |
백준 2178 미로 탐색 Python 실버 1 그래프, BFS (1) | 2024.03.22 |
백준 2667 단지번호 붙이기 Python 실버1 그래프 BFS (0) | 2024.03.22 |
백준 15650. N과 M (2) Python 백트래킹 실버3 (0) | 2024.03.21 |