https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpFQaAQMDFAUq
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
- DP를 이용하여 풀었다
TC = int(input())
for tc in range(1,TC+1):
cost = list(map(int,input().split()))
plan = list(map(int,input().split()))
dp = [21e8] * 12
dp[0] = min((cost[0]*plan[0]),cost[1]) # 0번 index에 일일권과 월이용권중 작은 값
dp[1] = dp[0] + min((cost[0] * plan[1]), cost[1]) # 1번 index에 저번 달 이용료 + 일일권과 월이용권중 작은 값
if cost[2] <= dp[1] + min((cost[0] * plan[2]), cost[1]): # 2번 index에 1,2,3월각각의 요금의 합과 3달 이용권중 싼 값을 넣음
dp[2] = cost[2]
else:
dp[2] = dp[1] + min((cost[0]*plan[2]),(cost[1]))
for i in range(3,12): # 3번인덱스부터 11번까지 반복
if dp[i-3]+cost[2] <= dp[i-1] + min((cost[0]*plan[i]),(cost[1])):
dp[i] = dp[i-3]+cost[2]
else:
dp[i] = dp[i-1] + min((cost[0]*plan[i]),(cost[1]))
dp[11] = min(dp[11],cost[3]) # 마지막 인덱스에서 연간 이용권과 지금 까지의 누적 합 비교
print(f'#{tc} {dp[11]}')
'Python > SW Expert Academy' 카테고리의 다른 글
[SWEA/Python] 1953. 탈주범 검거 (0) | 2022.10.11 |
---|---|
[SWEA/Python] 1949. 등산로 조성 (0) | 2022.10.10 |
[SWEA/Python] 5656. 벽돌 깨기 (1) | 2022.10.06 |