※ 문제
https://www.acmicpc.net/problem/14916
※ 문제 유형
수학, 다이나믹 프로그래밍, 그리디 알고리즘(SILVER_5)
※ 나의 풀이
- DP로 문제 해결
import sys
N = int(sys.stdin.readline())
dp = [-1] * (N + 1)
if N >= 2:
dp[2] = 1
if N >= 4:
dp[4] = 2
if N >= 5:
dp[5] = 1
# DP 계산
for i in range(6, N + 1):
if dp[i - 2] != -1: # 2원을 추가할 수 있는 경우
dp[i] = dp[i - 2] + 1
if dp[i - 5] != -1: # 5원을 추가할 수 있는 경우
if dp[i] == -1: # 아직 갱신되지 않은 경우
dp[i] = dp[i - 5] + 1
else: # 이미 값이 있는 경우 최소값 선택
dp[i] = min(dp[i], dp[i - 5] + 1)
print(dp[N])
'CODING_TEST' 카테고리의 다른 글
[백준/Python] 21318. 피아노 체조 (0) | 2024.12.30 |
---|---|
[백준/Python] 2805. 나무 자르기 (0) | 2024.12.30 |
[백준/Python] 9095. 1, 2, 3 더하기 (1) | 2024.12.26 |
[백준/Python] 1463. 1로 만들기 (0) | 2024.12.26 |
[백준/Python] 5525. IOIOI (0) | 2024.12.26 |