미소를뿌리는감자의 코딩
[백준 2024/10/15] 1463번 1로 만들기 본문
728x90
1. 문제
https://www.acmicpc.net/problem/1463
2. 접근 방법
dfs와 memoization을 이용하여 해결하면 된다고 생각하였다.
기존의 memoization과 다른 점이 있다면,
3으로 나눈 것과 2로 나눈 것과 1을 뺀 것 중에 재귀적으로 답을 구한 후, 가장 작은 값을 dp에 저장해 주는 과정이다.
3. 코드
import sys
def dfs(n):
if dp[n] != 0:
return dp[n]
ans = [sys.maxsize] * 3
if n % 3 == 0:
ans[0] = 1 + dfs(n//3)
if n % 2 == 0:
ans[1] = 1 + dfs(n//2)
ans[2] = 1 + dfs(n-1)
dp[n] = min(ans)
return dp[n]
if __name__ == "__main__":
n = int(input())
dp = [0] * (n+3)
dp[1] = 0
dp[2] = 1
dp[3] = 1
for i in range(4, n+1):
dfs(i)
print(dp[n])
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2024/10/18] 1600번 말이 되고픈 원숭이 (0) | 2024.10.18 |
---|---|
[백준 2024/10/18] 9655번 돌 게임 (2) | 2024.10.16 |
[백준 2024/10/14] 1520번 내리막 길 (0) | 2024.10.14 |
[백준 2024/10/13] 1912번 연속합 (0) | 2024.10.13 |
[백준 2024/10/12] 154856번 퇴사 2 (0) | 2024.10.12 |