본문 바로가기
알고리즘/그리디 알고리즘

백준 2437번 : 저울 java

by LDY3838 2022. 8. 8.
반응형

이 문제는 누적합을 이용하여 해결하는 문제입니다.

이 문제를 풀기 위해서는 우선 입력받은 값들을 정렬합니다.

그리고 첫번째 숫자부터 차례대로 더해가면서 누적합을 만듭니다.

그리고 만약 i+1번 자리에 있는 수가 i번까지의 누적합에 1을 더한 값보다 크다면 누적합에 1을 더한 값은 만들 수 없습니다.

이는 i번까지의 누적합이 그 숫자까지 더했을 때 만들 수 있는 수의 최댓값이기 때문입니다.


import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int[] intArr = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 0; i<N; i++)
            intArr[i] = Integer.parseInt(st.nextToken());

        Arrays.sort(intArr);

        if(intArr[0]>1){
            System.out.println(1);
            return;
        }

        int ans = intArr[0];
        for(int i = 1; i<N; i++){
            if(ans+1<intArr[i]){
                ans += 1;
                break;
            }

            ans += intArr[i];

            if(i == N-1)
                ans++;
        }

        System.out.println(ans);
    }
}
반응형

댓글