코딩테스트 파이썬/백준
호텔 ( 1106 번 )
세용용용용
2025. 6. 13. 21:39
🧠 알고리즘
특정 고객 수 이상을 유치하기 위한 최소 비용을 구하는 문제.
동적 계획법(DP)을 이용해 각 고객 수마다 최소 비용을 누적 계산하며
광고를 여러 번 사용할 수 있으므로 무한 배낭(Unbounded Knapsack) 방식으로 접근.
🧾 코드
import sys
def _main(c, max_cs_ct, cs):
answer = float('inf')
dp = [float('inf')] * (c + max_cs_ct + 1)
dp[0] = 0
for cost, count in cs:
for idx in range(count, len(dp)):
dp[idx] = min(dp[idx], dp[idx - count] + cost)
if idx >= c:
answer = min(answer, dp[idx])
return answer
c, n = map(int, sys.stdin.readline().rstrip().split())
cs, max_cs_ct = [], 0
for _ in range(n):
a = tuple(map(int, sys.stdin.readline().rstrip().split()))
max_cs_ct = max(max_cs_ct, a[1])
cs.append(a)
print(_main(c, max_cs_ct, cs))
⏱️ 시간 복잡도
for cost, count in cs : # 반복 n번 ( 선형 시간 )
for idx in range(count, len(dp)): # 반복 ( 선형 시간 )
해당 알고리즘 시간 복잡도 : 이차형 시간 복잡도 ( O(n ** 2) )