자바 백준 2847번
실버 4
https://www.acmicpc.net/problem/2847
문제 보기
분류: 그리디 알고리즘
문제 풀기
게임의 레벨이 높으면 그 아래 레벨보다 점수가 높아야 하기 때문에 가장 높은 레벨부터 점수를 확인하는 식으로 하여 레벨을 내려가며 검사한다.
총 레벨의 개수만큼 array 를 생성하여 그 안에 레벨이 낮은 순서로 숫자를 입력한다.
점수가 모두 입력된 array 에서 for loop 를 통해 제일 마지막 index 부터 바라보고, 레벨이 높은 index 와 그 아래 레벨인 index - 1 을 비교하여 높은 레벨의 점수가 낮은 레벨의 점수보다 낮거나 같을때의 조건문을 형성한다.
이 조건문에 진입하게 되면 초기화한 count 를 levelArr[j - 1] - levelArr[j] + 1 만큼 누적하여 늘려준다. 이 코드는 후에 적게될 index 에 영향을 받기 때문에 먼저 실행한다. 그리고 낮은 레벨의 점수인 levelArr[j - 1] 의 value 를 높은 레벨의 점수인 levelArr[j] - 1 의 value 로 변경한다.
조건문에 진입하지 않는 경우에는 다음 아래 레벨과 그 아래아래 레벨이 점수 변경없이 비교를 시작하게 된다.
코드 보기
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int totalLevel = sc.nextInt(); // 전체 레벨 입력.
int[] levelArr = new int[totalLevel]; // 레벨 개수 만큼 array 생성.
for (int i = 0; i < totalLevel; i++) { // 생성된 array 낮은 레벨 순서로 점수 입력.
levelArr[i] = sc.nextInt();
}
int count = 0; // 문제가 있는 점수에 대해 낮춰야 하는 횟수를 count 로 초기화.
for (int j = totalLevel - 1; j > 0; j--) { // array 의 가장 높은 레벨인 맨 뒷 index 부터 검사.
if (levelArr[j - 1] >= levelArr[j]) { // 높은 레벨이 바로 그 아래 레벨보다 작거나 같으면.
count += levelArr[j - 1] - levelArr[j] + 1; // 점수차 + 1 만큼 카운트 증가. (바로 아래 array 의 value 를 바꿀것이기에 먼저 코드 적용.)
levelArr[j - 1] = levelArr[j] - 1; // 낮은 레벨의 점수를 높은 레벨의 점수 - 1 로 변경.
}
}
System.out.print(count);
}
}
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 17284 - Vending Machine (0) | 2023.04.24 |
---|---|
[Java] 백준 풀기 2864 - 5와 6의 차이 (0) | 2023.04.23 |
[Java] 백준 풀기 14682 - Shifty Sum (0) | 2023.04.21 |
[Java] 백준 풀기 17201 - 자석 체인 (0) | 2023.04.20 |
[Java] 백준 풀기 26209 - Intercepting Information (0) | 2023.04.19 |