https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
나의 코드
N = int(input())
dp = [0]*1000001
for i in range(2, N+1):
# 1씩 더하면서 dp에 저장
dp[i] = dp[i-1] + 1
# 2로 나눠지는 수는 2로 나눈 수에 해당하는 횟수에 1을 더한 값과 1을 뺀 수에 해당하는 횟수에 1을 더한 값의 최솟값을 저장
if i % 2 == 0:
dp[i] = min(dp[i], dp[i//2]+1)
# 3으로 나눠지는 수는 3으로 나눈 수에 해당하는 횟수에 1을 더한 값과 1을 뺀 수에 해당하는 횟수에 1을 더한 값의 최솟값을 저장
if i % 3 == 0:
dp[i] = min(dp[i], dp[i//3]+1)
print(dp[N]) #N의 값에 해당하는 횟수 출력
결과

DP 개념은 알겠는데 코드로 짜기엔 아직 무리인듯.... 머리속에서 생각한 방법인데 코드로 구현하기에는 아직 부족한 것 같다.
'스터디 1일 1커밋' 카테고리의 다른 글
| 240406 [BOJ/백준] 23254. 나는 기말고사형 인간이야 (0) | 2024.04.06 |
|---|---|
| 240405 [BOJ/백준] 11399. ATM (0) | 2024.04.05 |
| 240331 [BOJ/백준] 16493. 최대 페이지 수 (0) | 2024.03.31 |
| 240331 [BOJ/백준] 2805. 나무 자르기 (1) | 2024.03.31 |
| 240328 [BOJ/백준] 12789. 도키도키 간식드리미 (0) | 2024.03.28 |