728x90
< 처음 풀이 >
접근 방법을 아예 몰랐다. 당연히 3으로 나누면 더 답이 작아지는 줄 알았지만 그렇지 않은 경우가 존재 했다.
< 해결 방법 >
동적 풀이 방법을 찾아서 공부를 했다. 처음에는 일해가 되지 않았지만 계속 읽어보니 dp[2], dp[3] ... 순으로의 값들을 저장하는 방법을 알게 되었고 이를 이용해서 해결을 했다. input 이 1 인 경우를 고려하지 않아서 에러가 났지만 스스로 해결을 할 수 있었다.
import sys
a = int(input())
if 1<a<3:
print(1)
elif a==1:
print(0)
# X가 3으로 나누어 떨어지면, 3으로 나눈다.
# X가 2로 나누어 떨어지면, 2로 나눈다.
# 1을 뺀다.
else:
dp = [0]*10000001
dp[2]=1
dp[3]=1
answer = 0
for i in range(4,a+2):
dp[i]=dp[i-1]+1
if i%2==0:
dp[i] = min(dp[i],dp[i//2]+1)
if i%3==0:
dp[i] = min(dp[i//3]+1,dp[i])
print(dp[a])
728x90
'🟢 알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
| [파이썬] 백준 9184 신나는 함수 실행 (0) | 2022.08.18 |
|---|---|
| [파이썬] 백준 2156 포도주 시식 (0) | 2022.08.17 |
| [파이썬] 백준 1912 연속합 (0) | 2022.08.16 |
| [파이썬] 백준 1018 체스판 다시 칠하기 (0) | 2022.08.05 |
| [파이썬] 백준 2477 참외밭 (0) | 2022.08.05 |