하루일문

[백준] 12865번 평범한 배낭(파이썬) 본문

algorithm/baekjoon

[백준] 12865번 평범한 배낭(파이썬)

support_u 2023. 4. 15. 18:27

문제

 

12865번: 평범한 배낭

첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)

www.acmicpc.net

코드

n, k = map(int, input().split())

tool = [[0,0]] + [list(map(int, input().split())) for _ in range(n)]

bag = [[0] * (k + 1) for _ in range(n+1)]

# 전체 물품 수
for i in range(1, n+1):
    # 가방에 담을 수 있는 최대 무게
    for j in range(1, k+1):
        # 물품 당 무게가 최대 무게보다 안나간다면(가방에 들어갈 무게라면) 넣었을때랑 넣지 않을때 비교
        if j - tool[i][0] >= 0:
            bag[i][j] = max(bag[i-1][j], bag[i-1][j-tool[i][0]] + tool[i][1])
        # 아니면 제외한 무게
        else:
            bag[i][j] = bag[i-1][j]
print(bag[n][k])

느낀점

가방은 정형화된 풀이가 있어서 이해하면서 외우는 게 중요해보인다.