규칙만 파악하면 쉽게 풀 수 있는 문제이다.
문제가 이해안되는 분들을 위해 힌트만 먼저 제공하겠습니다!
💡힌트
총4 레벨이 있고 각 레벨마다 5 , 3 , 7 , 5 점이다.
1레벨은 5점
2레벨은 3점
3레벨은 7점
4레벨은 5점 이다.
가장 어려운 4레벨의 5점을 기준으로 점수를 낮추면 된다.
3레벨을 (5-1)4점을 만들기 위해서는 7-3 을 해야한다. 즉 3번 감소 시켜야한다.
1레벨까지 이 과정을 반복하면서 상위 레벨보다 작은 점수를 만들면 된다.
2847번 의 규칙은 상위 레벨과 비교 하며 상위 레벨의 점수보다 1점이 더 적을때까지 감소시켜준다.
기준이 되는 상위 레벨을 점수를 maxLevel 그 바로 밑의 레벨의 점수를 preLevel 이라고 한다면
maxLevel>preLevel 이 되도록 감소시키면 된다.
이를 while 문을 사용여서 preLevel이 maxLevel 보다 작은 점수가 될 때 까지 감소시켜주고 높은 레벨부터 내림차순으로 내려가면서 감소시켜준다.
for(int i=n-2;i>=0;i--)
{
//앞 단계 점수 낮추기
int preLevel = level[i];
while(maxLevel <= preLevel)
{
preLevel -=1;
answer++;
}
//다음레벨로 이동(내림차순)
maxLevel = preLevel;
}
*최종코드
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));
int answer=0;
//레벨
int n = Integer.parseInt(br.readLine());
Integer[] level = new Integer[n];
for(int i=0;i<n;i++)
{
//각 레벨의 점수 입력 받기
level[i] = Integer.parseInt(br.readLine());
}
//가장 마지막 레벨(어려운 레벨) 의 값을 기준으로 점수 낮추기
int maxLevel = level[n-1];
for(int i=n-2;i>=0;i--)
{
//앞 단계 점수 낮추기
int preLevel = level[i];
while(maxLevel <= preLevel)
{
preLevel -=1;
answer++;
}
//다음레벨로 이동(내림차순)
maxLevel = preLevel;
}
System.out.println(answer);
}
}
'항해' 카테고리의 다른 글
[Day18]JAVA 백준 센서(2212번) (0) | 2024.11.14 |
---|---|
[Day17]JAVA 백준 밤양갱(31926번) (0) | 2024.11.13 |
[Day15]JAVA 카드 문자열(13417번) (0) | 2024.11.11 |
[Day14]JAVA 백준 거스름돈(14916번) (0) | 2024.11.10 |
[Day13]JAVA- 백준 고양이는 많을수록 좋다(27961번) (0) | 2024.11.10 |