Algorithm/SW Expert Academy

[Python] 1952. 수영장

느낌표 공장장 2021. 10. 12. 23:59
tc = int(input())
for idx in range(1, tc+1):
    charge = list(map(int, input().split()))    # 1일, 1달, 3달, 1년
    plan = list(map(int, input().split()))  # 1월부터 12월까지의 이용 계획

    dp = [0 for _ in range(12)]
    for i in range(12):
        dp[i] = dp[i-1] + min(plan[i] * charge[0], charge[1]) # 이전 달의 요금 + (1일 이용권으로 계산 vs 1달 이용권으로 계산)
        if i > 1:   # 3달 이상 됐다면
            dp[i] = min(dp[i], dp[i-3] + charge[2])   # 3달 이용권으로 할까 말까

    print('#{} {}'.format(idx, min(dp[-1], charge[3]))) # 1년 이용권으로 할까 말까

DFS대신 DP로 풀어보았다 !