알고리즘/백준

[파이썬, 자바] BOJ_2847(게임을 만든 동준이)

딱따구르리 2021. 2. 10. 19:30
728x90
반응형

문제

 

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

 

2847번: 게임을 만든 동준이

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

www.acmicpc.net


 

해설

 

이 문제는 가장 마지막 레벨의 점수가 가장 높도록 만들어야 하는 문제이다.

'점수를 내리는 것을 최소한'으로 하려면 가장 높은 점수부터 1점씩만 차이가 나게 하면 된다.

 

마지막 레벨부터 시작해서 이전 레벨이 다음 레벨보다 점수가 높을 때,

높은 점수 - 낮은 점수 + 1을 해주면

높은 점수에서 빼야 할 점수를 알 수 있다.

 

 


코드

 

-파이썬

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

n = int(input())  #레벨의 수
level = []
res = 0
sum = 0

for i in range(n):
    level.insert(i, int(input()))

for j in range(n - 1, 0, -1):
    if level[j] <= level[j - 1]:
        res = level[j - 1] - level[j] + 1
        level[j - 1] = level[j - 1] - res
        sum += res

print(sum)

 

-자바

//백준 2847(게임을 만든 동준이)
import java.util.*;
import java.io.*;

public class Boj_2847 {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());  //레벨 수
		int[] level = new int[n];
		int cnt = 0;
		int sum = 0;
		
		for(int i = 0; i < n; i++) {
			level[i] = Integer.parseInt(br.readLine());  //레벨 별 점수
		}
		
		for(int j = n - 1; j > 0 ; j--) {
			if(level[j] <= level[j - 1]) {
				cnt = level[j - 1] - level[j] + 1;
				level[j - 1] = level[j - 1] - cnt;
				sum += cnt;
			}
		}
		
		System.out.println(sum);
	}

}
728x90
반응형