공부/알고리즘
[백준]20413_MVP 다이아몬드 (Easy)_그리디 Java 풀이
happyeuni
2023. 2. 14. 18:11
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')
}
}