본문 바로가기

코딩테스트 연습/Baekjoon

[Baekjoon]20413번: MVP 다이아몬드 (easy)(c++)

https://www.acmicpc.net/problem/20413

 

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

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

www.acmicpc.net

 

신한은행 코딩테스트에서 비슷한 문제가 나왔다고 해서 풀어봤다.

간단한 구현문제였다.

 

1. grade배열에 bronze, silver, gold, platinum, diamond까지의 최댓값 저장

2. 첫번째 cash[0]은 2달에 걸쳐 확인할 것이 없으므로, 해당 등급의 grade범위의 최댓값 저장

3. 나머지 cash값은 해당 등급의 최댓값에서 전날 실적값을 뺀 값 저장

4. cash배열을 모두 더하기


코드(c++)

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int main()
{
    int N;
    int b=0, s, g, p, d;
    string MVP;
    
    cin >> N;
    cin >> s >> g >> p >> d;
    cin >> MVP;
    int cash[N];
    
    int grade[5] = {s-1, g-1, p-1, d-1, d};
    
    for(int i=0;i<N;i++){
        if(i == 0){
            if(MVP[i] == 'B') cash[i] = grade[0];
            else if(MVP[i] == 'S') cash[i] = grade[1];
            else if(MVP[i] == 'G') cash[i] = grade[2];
            else if(MVP[i] == 'P') cash[i] = grade[3];
            else if(MVP[i] == 'D') cash[i] = grade[4];
        }
        else{
            if(MVP[i] == 'B') cash[i] = grade[0] -  cash[i-1];
            else if(MVP[i] == 'S') cash[i] = grade[1] - cash[i-1];
            else if(MVP[i] == 'G') cash[i] = grade[2] - cash[i-1];
            else if(MVP[i] == 'P') cash[i] = grade[3] - cash[i-1];
            else if(MVP[i] == 'D') cash[i] = grade[4];
        }
    }
    int sum = 0;
    for(int i=0;i<N;i++) sum+=cash[i];
    cout << sum;
    return 0;
}