알고리즘

[이코테]만들 수 없는 금액 <그리디>

JH_Lucid 2021. 5. 3. 14:53
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

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

        int num = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int[] arr = new int[num];
        for(int i=0; i<num; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr);
        int target = 1;
        for(int i=0; i<num; i++) {
            if(target < arr[i])
                break;
            else
                target += arr[i];
        }
        System.out.println(target);

        long afterTime = System.nanoTime();
        System.out.println("시간 : " + (afterTime-beforeTime)/1000000+"ms");
    }
}

- target보다 작을 경우, 내부 배열안에서 해당 값을 감당(더해서 구할) 수 있다.

- target보다 클 경우, 해당 target은 만들지 못하는 값이 되어, 정답이 된다.