백준 #2847 게임을 만든 동준이
문제 설명👩🏫
게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어의 점수는 레벨을 클리어하면서 얻은 점수의 합이다.
각 레벨을 클리어할 때 얻는 점수가 주어졌을 때, 몇 번 감소시키면 되는지 구해라. 점수는 항상 양수이어야 하고, 1만큼 감소시키는 것이 1번이다.
입력
4
5
3
7
5
출력
6
내 코드💻
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int num = Integer.parseInt(str);
int[] arr = new int[num];
for (int i = 0; i < num; i++) {
str = br.readLine();
arr[i] = Integer.parseInt(str);
}
int start = arr[num - 1];
int sum = 0;
int j = 1;
for (int i = num - 2; i >= 0; i--) {
int standard = start - j;
if (standard <= arr[i]) {
sum += arr[i] - (start - j);
} else {
start = arr[i];
j = 0;
}
j++;
}
System.out.println(sum);
}
}
설명💡
입력받은 점수들 중 마지막에서부터 시작한다.
마지막값을 시작점으로 각각의 값을 1씩 줄인 값으로 만든다.
그 줄인 값을 기준으로 해서, 원소가 더 크다면 그 차이만큼 답에 더해주고, 만약 원소가 더 작다면 다시 시작을 그 원소부터 시작해준다.
느낀 점 및 궁금한 점🍀
그리디 문제 중에서는 비교적.. 쉬운 듯한 느낌이었다. 테스트 케이스를 여러 개 생각할수록 쉽게 풀 수 있을 것 같은 문제였다.