본문 바로가기
항해

[Day16]JAVA 백준 게임을 만든 동준이(2847번)

by neVerThe1ess 2024. 11. 12.

 

 

규칙만 파악하면 쉽게 풀 수 있는 문제이다.

문제가 이해안되는 분들을 위해 힌트만 먼저 제공하겠습니다!

 

💡힌트

총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);
    }   
}