알고리즘/백준 풀이(그리디)

백준 2847번 - 게임을 만든 동준이

공부 기록장 2024. 2. 3. 18:04

https://www.acmicpc.net/problem/2847

 

2847번: 게임을 만든 동준이

학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어

www.acmicpc.net

 

 

 

이 문제는 첫 번째 레벨부터 마지막 레벨까지 점수가 순차적으로 상승하도록 만들면 된다.

3
5
5
5

위 예제에서  5 5 5  는 3 4 5 가 되도록 하는데 이 때 첫 번째 5는 -2 , 두 번째 5는 -1 의 계산을 해야하므로 출력은 3이 된다.

 

어차피 마지막 레벨인 배열의 마지막 부분을 기준으로 한 단계씩 내리면서 점수를 차감해야 하기 때문에

기준이 되는 last 값은 arr[3] → arr[2] arr[1] 순으로 되도록 하며 

예를 들어 last 값이 arr[3] 일 때는 arr[2] 의 값이 arr[3] 보다 작아야 하므로 arr[i] < last 라는 조건을 두어 코드를 짜면 될 것 같다.

 

 

▶코드

import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int N = Integer.parseInt(br.readLine());
        int arr[] = new int[N];
        int cnt=0;

        for(int i=0;i<N;i++){
            st = new StringTokenizer(br.readLine());
            arr[i]=Integer.parseInt(st.nextToken());
        }
        int last=0;
        for(int i=N-2;i>=0;i--){
            last = arr[i+1];
            if(arr[i]<last){
                continue;
            }
            else if(arr[i]>=last){
                for(;;){
                    if(arr[i]<last){
                        break;
                    }
                    else{
                        arr[i]--;
                        cnt++;
                    }
                }
            }
        }
        System.out.println(cnt);
    }
}