[백준 #2847] 게임을 만든 동준이

Yujjin·2025년 2월 8일

백준

목록 보기
15/20
post-thumbnail

백준 #2847 게임을 만든 동준이

백준 #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씩 줄인 값으로 만든다.
그 줄인 값을 기준으로 해서, 원소가 더 크다면 그 차이만큼 답에 더해주고, 만약 원소가 더 작다면 다시 시작을 그 원소부터 시작해준다.


느낀 점 및 궁금한 점🍀

그리디 문제 중에서는 비교적.. 쉬운 듯한 느낌이었다. 테스트 케이스를 여러 개 생각할수록 쉽게 풀 수 있을 것 같은 문제였다.

0개의 댓글