백준온라인
[백준온라인] 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레벨의 점수보다 한칸 낮춰준다.