본문 바로가기
개발/코딩테스트

[Python] 백준 20413 MVP 다이아몬드 (Easy) - 구현

by seopport 2023. 2. 2.
728x90
반응형

백준 홈페이지 문제와 해설을 풀이한 글입니다.

 

 

백준 20413 MVP 다이아몬드 (Easy)

 

20413번: MVP 다이아몬드 (Easy)

입력된 MVP 등급을 달성하기 위한 최대 누적 과금액을 만원 단위로 출력한다.

www.acmicpc.net

 


 

문제

 

상민이는 게임 단풍잎 이야기에 과금을 즐겨 한다. 단풍잎 이야기에는 과금액에 따라 혜택을 제공하는 'MVP 등급' 이 존재한다.
MVP 등급은 브론즈(B), 실버(S), 골드(G), 플래티넘(P), 다이아몬드(D) 로 총 다섯 등급이 있으며, 현재 달과 지난달, 즉 현재 달을 포함한 최근 2개월간의 과금액으로 결정된다.
단, 단풍잎이야기에는 과도한 과금을 막기 위해 '최대 과금 한도' 가 있어 한 달에 최대 다이아몬드 등급 기준액 까지만 과금할 수 있으며, 만원 단위로만 과금이 가능하다.

MVP 등급은 해당 달이 끝날 때 계산되어 책정된다.
예를 들어 아래의 표와 같은 등급 기준액을 따르고 1월에 게임을 시작한 상민이가 1월에 30만, 2월에 20만, 3월에 50만원을 과금했다면, 1월(30만원) 과 2월(30만원 + 20만원 = 50만원) 에는 실버 등급, 3월 (20만원 + 50만원 = 70만원) 에는 골드 등급으로 책정된다.

 

MVP 등급(표기) 등급 기준액 2개월 간의 과금액
브론즈(B) 0 만원 0 만원 ~ 29 만원
실버(S) 30 만원 30 만원 ~ 59 만원
골드(G) 60 만원 60 만원 ~ 89 만원
플래티넘(P) 90 만원 90 만원 ~ 149 만원
다이아몬드(D) 150 만원 150 만원 이상

 

상민이는 게임을 시작하고 N 개월 동안 수 많은 현금을 과금해왔다. 상민이는 이 사실을 자신의 여자친구에게 철저히 비밀로 하고 있었다.
상민이의 여자친구는 상민이가 게임에 과금하는 것을 굉장히 싫어하기 때문이다.
그러던 어느 날 문제가 발생했다. 상민이의 여자친구에게 N 개월간의 MVP 등급 기록이 유출된 것이다!

상민이의 여자친구는 상민의 과금액을 역추적하기 위해 당신에게 부탁했다.
상민이의 여자친구 : 상민이가 게임에 최대 얼마나 과금한 건지 알려줘.
둘 사이에 어떤 일이 벌어질지는 모르겠지만, 당신은 상민이의 여자친구를 위한 프로그램을 작성한다.

 

입력

 

첫 번째 줄에는 게임을 플레이 한 개월 수 N 이 주어진다.
두 번째 줄에는 실버, 골드, 플래티넘, 다이아몬드 등급 기준액 s, g, p, d가 만원 단위로 순서대로 주어진다. 브론즈 등급 기준액은 0 원이다.
세 번째 줄에는 게임을 플레이 한 첫 번째 달부터 N 번째 달까지의 MVP 등급이 등급 표기대로 주어진다. 기록과 같은 MVP 등급 달성이 불가능한 경우는 주어지지 않는다.

 

출력

 

입력된 MVP 등급을 달성하기 위한 최대 누적 과금액을 만원 단위로 출력한다.

 

제한

 

1 ≤ N ≤ 36
0 < s < g < p < d ≤ 500

 

예제 입력 1 예제 출력 1
3
30 60 90 150
BSG
118

 

예제 입력 2 예제 출력 2
10
257 269 367 500
BSGGGGPPDD
2499

 

 

# n 을 입력 받는다.
n = int(input())

# 4 가지 등급 구분 점수를 입력 받는다.
s, g, p, d = list(map(int, input().split()))

# 등급
rating = input()

# 최종 값
result = 0

# 맨처음 값
prevNum = 0

for i in range(n):
  if rating[i] == 'B':
    result += (s-1) - prevNum
    prevNum = (s-1) - prevNum
  if rating[i] == 'S':
    result += (g-1) - prevNum
    prevNum = (g-1) - prevNum
  if rating[i] == 'G':
    result += (p-1) - prevNum
    prevNum = (p-1) - prevNum
  if rating[i] == 'P':
    result += (d-1) - prevNum
    prevNum = (d-1) - prevNum
  if rating[i] == 'D':
    result += d
    prevNum = d
    
print(result)

 

글을 마치며

 

이 문제는 금융 은행 코딩테스트 출시 문제 느낌과 비슷하다고 본 기억이 있다.

구현에 기본적인 문제라고 생각하며, 해당 문제는 1번 문제로 나온 만큼 기본에 충실하면 풀 수 있는 내용이다.
문제를 풀면서 가장 고민한 부분은 변수 명에 대한 내용과 조금 더 간단하게 구현을 하고자 하는 목표를 두었다.

단순 IF 문으로 간단하게 풀 수 있고, 독자 분들도 쉽게 풀 수 있을 것이라 생각한다. 
728x90
반응형