문제 출처 : www.acmicpc.net/problem/12852
문제 해석 : 나누기 3, 나누기 2, 빼기 1을 수행해서 1로 만드는데 가장 적은 횟수의 연산을 한 경우를 찾는 것이다.
문제 풀이 : Q를 이용하면 풀 수 있다.
풀이 코드
from collections import deque
N = int(input())
Q = deque()
Q.append([N])
answer = []
while Q:
arr = Q.popleft()
x = arr[0]
if x == 1:
answer = arr
break
if x % 3 == 0:
Q.append([x//3] + arr)
if x % 2 == 0:
Q.append([x//2]+arr)
Q.append([x-1]+arr)
print(len(answer)-1)
for i in range(len(answer)-1, -1, -1):
print(answer[i], end = " ")
author : donghak park
contact : donghark03@naver.com
## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.
'📊알고리즘, 문제풀이 > 📈문제풀이 (PS)' 카테고리의 다른 글
[알고리즘][Python] 백준 1987 알파벳 문제 풀이 (0) | 2021.03.11 |
---|---|
[알고리즘][Python] 백준 1647 도시 분할 계획 문제 풀이 (0) | 2021.03.11 |
[알고리즘][Python] 백준 1644 소수의 연속 합 문제 풀이 (0) | 2021.03.10 |
[알고리즘][Python] 백준 13164 행복 유치원 문제 풀이 (0) | 2021.03.10 |
[알고리즘][Python] 백준 2573 빙산73 빙산 문제 풀이 (0) | 2021.03.09 |