본문 바로가기
공부/알고리즘

[백준]20413_MVP 다이아몬드 (Easy)_그리디 Java 풀이

by happyeuni 2023. 2. 14.

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

 

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

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

www.acmicpc.net

풀이

각 월의 최대 금액은 그 등급의 최대 등급인데,

이전달의 영향을 받아 그것을 빼 주어야 한다.

ex. 30 60 90 150          BSGG…

  1달  2달 3달  4달
해당 달의 등급 B S G G
이전달의 영향을 받은해당 달의 최대 금액 B S-B G-(S-B) G-(G-(S-B))

0≤B<30, 30≤S<60, 60≤G<90,90≤P<150, D=150 ( 다이아는 무조건 150이 최대)

→ B=29, S=59, G=89, P=149, D=150 에서 위처럼 전달을 빼주값을 누적해주면 됨

코드

package _DontKnow;

import java.io.*;
import java.lang.*;
import java.util.*;
public class Main_20413 {
    static int standard[];
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int N = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        standard = new int[4];
        for (int i = 0; i < 4; i++) {
            standard[i] = Integer.parseInt(st.nextToken());
        }
        String MVP = br.readLine();
        int maxFee = 0;
        int before = 0;
        for (int i = 0; i < N; i++) {
            char mvp = MVP.charAt(i);
            if(mvp!='D'){
                int now = calFee(mvp);
                maxFee += now - before;
                before = now - before;
            }else maxFee += calFee(mvp);
        }
        System.out.println(maxFee);
    }

    public static int calFee(char mvp){
        if(mvp == 'B') return standard[0]-1;
        if(mvp == 'S') return standard[1]-1;
        if(mvp == 'G') return standard[2]-1;
        if(mvp == 'P') return standard[3]-1;
        return standard[3]; //if(mvp == 'D')
    }
}

댓글