풀이
각 월의 최대 금액은 그 등급의 최대 등급인데,
이전달의 영향을 받아 그것을 빼 주어야 한다.
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')
}
}
'공부 > 알고리즘' 카테고리의 다른 글
[Java]이진탐색 총 정리(상한upper bound, 하한lower bound, 중복 고려, while문 범위 설정,Arrays.binarySearch()메소드 등) (0) | 2023.05.19 |
---|---|
[프로그래머스]42840_모의고사_완전탐색 Java 풀이 (0) | 2023.02.15 |
[백준]1916_최소비용 구하기_다익스트라 인접행렬, 인접리스트 Java풀이 + 반례 (0) | 2023.02.08 |
[백준]17413_단어 뒤집기 2_Java 풀이 (0) | 2023.02.04 |
[프로그래머스]42576_완주하지 못한 선수_Java 풀이 2가지 (0) | 2023.01.25 |
댓글