내가 시도한 방법
아래 그림은 위 문제를 상태 트리로 나타낸 것이다.
처음에 어떻게 풀지 감이 오지 않았었는데, 그림으로 하나씩 풀어내면서 bfs를 사용할 수 있겠는데? 라는 생각이 들었다.
from collections import deque
# 주석 처리된 q는 deque를 사용하지 않고, list의 pop 메소드 사용
# queue는 deque를 import해서 사용
def bfs(start):
# q = [start]
queue = deque()
queue.append(start)
visited = [0]*(10**6+1)
visited[start] = 1
while queue:
# current = q.pop(0)
current = queue.popleft()
if current == 1:
return visited[current] - 1
for new, check in [(current // 3, current % 3), (current // 2, current % 2), (current - 1, 0)]:
# (현재 - 1)은 무조건 q에 추가되고, 2나 3으로 나누어떨어질 때 q에 추가
if not check and not visited[new]:
# q.append(new)
queue.append(new)
visited[new] = visited[current] + 1
number = int(input())
print(bfs(number))
후기