https://www.acmicpc.net/problem/20413
MVP 등급은 브론즈(B), 실버(S), 골드(G), 플래티넘(P), 다이아몬드(D)로 총 다섯 등급이 있으며, 현재 달과 지난달, 즉 현재 달을 포함한 최근 2개월간의 과금액으로 결정된다.
단, 단풍잎이야기에는 과도한 과금을 막기 위해 '최대 과금 한도'가 있어 한 달에 최대 다이아몬드 등급 기준액 까지만 과금할 수 있으며, 만원 단위로만 과금이 가능하다.
MVP 등급은 해당 달이 끝날 때 계산되어 책정된다.
상민이의 여자친구는 상민의 과금액을 역추적하기 위해 상민이가 게임에 최대 얼마나 과금한건지 알려달라고 부탁했다.
상민이가 한번 달성한 MVP 등급은 줄어들지 않는다.
(입력 및 선언)
(최대 누적 과금액 계산하기)
총 n번 반복한다.
최대 누적 과금액은 다음 등급 - 1한 값에 전 달의 과금액을 뺀 것과 같다.
전 달 과금액은 다음 등급 - 1한 값에 전 달 과금액을 뺀 값이다.
1번 예시처럼 등급 기준액은 30, 60이고 등급이 BS일 때,
첫 번째 달은 29, 두 번째 달은 29(prev) + x = 59가 된다.
즉, x는 30이다.
이렇게 전 달의 과금액과 등급 기준액을 비교하면서 최대 누적 과금액을 구할 수 있다.
마지막 다이아몬드 레벨의 최대 금액은 total과 prev 모두 다이아몬드 기준액이다.
n = int(input())
s, g, p, d = map(int, input().split())
grade = list(map(str, input()))
total = 0
prev = 0
for i in range(n):
if grade[i] == 'B':
total += s - 1 - prev
prev = s - 1 - prev
elif grade[i] == 'S':
total += g - 1 - prev
prev = g - 1 - prev
elif grade[i] == 'G':
total += p - 1 - prev
prev = p - 1 - prev
elif grade[i] == 'P':
total += d - 1 - prev
prev = d - 1 - prev
elif grade[i] == 'D':
total += d
prev = d
print(total)
과금액을 모르는 상태에서 전 달을 같이 처리해주는 부분이 어려워 블로그를 참고했다.
그리고 다이아몬드 등급에서 다이아 등급액을 넣어주어야 하는 부분도 주의 깊게 살펴봐야 했다.