이모저모

동적 계획, knapsack 연습 - 설탕배달(백준) 본문

coding/알고리즘,자료구조

동적 계획, knapsack 연습 - 설탕배달(백준)

Jeo 2022. 2. 9. 16:00

문제: https://www.acmicpc.net/problem/2839

import sys

n = int(sys.stdin.readline().rstrip())

# 초기화에 사용할 큰 수
INF = int(1e5)

# 동적으로 기입할 배열
dy = [INF] * (n+1)
dy[3] = 1

# 3kg 봉지만 고려하는 경우
for i in range(4, n+1):
    dy[i] = min(dy[i], dy[i-3] + 1)

# 5kg 봉지도 고려하는 경우
if n >= 5:
    dy[5] = 1
    for j in range(6, n+1):
        dy[j] = min(dy[j], dy[j-5] + 1)

# 3과 5로 딱 떨어지게 담을 수 없는 경우 INF 로 남아있음 => -1 리턴
if dy[n] == INF:
    print(-1)
else:
    print(dy[n])
Comments