백준온라인

[백준온라인] 2847번 게임을 만든 동준이

cbkpar 2021. 7. 3. 13:27

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

 

2847번: 게임을 만든 동준이

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

www.acmicpc.net

문제 요약 : 점수를 감소시켜 레벨별 점수를 오름차순으로 만드는 최소 회수 출력 

입력 출력
N과 N줄의 레벨별 점수 점수를 감소시킨 최소 회수

 

JAVA

소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_2847.java

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
30600151 cbkpar 2847 맞았습니다!! 14136KB 136ms Java 11 542B
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n,i,s;
		n = Integer.parseInt(br.readLine());
		int[] arr = new int[n];
		for(i=0;i<n;i++) arr[i] = Integer.parseInt(br.readLine());
		s = 0;
		for(i=n-2;i>=0;i--) {
			if(arr[i]>=arr[i+1]) {
				s += arr[i]-arr[i+1]+1;
				arr[i] = arr[i+1]-1;
			}
		}
		System.out.println(s);
	}
}

각 레벨에 대한 점수 값을 배열에 저장 한 뒤

레벨이 높은 순에서 낮은순으로 비교해가면서 수정해야 하는 점수 회수를 총합하면 된다.

 

낮은 레벨 점수 >= 높은 레벨 점수

낮은 레벨 점수를 높은 레벨 점수-1 로 만들면된다.

 

낮은 레벨 점수 < 높은 레벨 점수

낮은 레벨 점수를 수정할 필요가 없다.

 

 

예제)

각 레벨의 점수가 5 3 7 5 일경우

3레벨의 점수가 4레벨의 점수보다 같거나 크므로 4레벨의 점수보다 한칸 낮춰준다.

2레벨의 점수가 3레벨의 점수보다 작으므로 2레벨의 점수를 그대로 둔다.

1레벨의 점수가 2레벨의 점수보다 같거나 크므로 2레벨의 점수보다 한칸 낮춰준다.