[Java] 백준 2847번 : 게임을 만든 동준이

2847번 : 게임을 만든 동준이 (그리디 알고리즘)
HootJem's avatar
Aug 20, 2024
[Java] 백준 2847번 : 게임을 만든 동준이
 

문제

notion image

접근법

레벨의 수 : 4 , 점수 : 5 3 7 5 입력을 받았을 때
가장 뒤의 점수가 제일 높고 순차적으로 작아져야 한다.
따라서 for 문에서 배열의 뒤에서 부터 앞으로 탐색한다.
  • i = 2 일때 7, 5 를 비교하게 되고 필요한 차이는 7 - 5 + 1 = 3 이 됨.
    • scores[2] -= 3 을 하면 배열 상태는 [5, 3, 4, 5]
    • 3을 count 에 더한다.
  • i = 1 일때 3, 4 는 옳기 때문에 변경할 필요 없음.
  • i = 0 일때 5, 3 을 비교하여 필요한 차이를 구함 5 - 3 + 1 = 3
    • scores[0] -= 3 으라면 배열은 [2, 3, 4, 5] 가 됨
    • 필요한 차이인 3을 count 에 더한다.
 

코드

public class Main_2847 { public static void main(String[] args) throws IOException { //게임을 만든 동준이 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int N = Integer.parseInt(br.readLine()); int[] scores = new int[N]; for(int i = 0; i<N; i++) { scores[i] = Integer.parseInt(br.readLine()); } int count = 0; for(int i = N-2 ; i>=0; i--) { if(scores[i] >= scores[i+1]) { int minus = scores[i] - scores[i+1] + 1; scores[i] -= minus; count += minus; } } bw.write(String.valueOf(count)); bw.flush(); bw.close(); } }
Share article

[HootJem] 개발 기록 블로그