Algorithm

[백준] 11399 ATM

Denken_Y 2019. 5. 28. 05:13

임의의 사람 N 명과 각 사람들이 ATM에서 돈을 뽑는데 걸리는 시간 Pi가 각각 input으로 주어진다.

이때 각 사람들이 모두 돈을 뽑는데 걸리는 시간의 합의 최솟값을 구하라.

 

Pi가 작은 사람이 순서가 뒤로 갈수록 기다리는 시간이 증가하는것을 알 수 있다.

그 이유는 뒤에 위치한 사람은 앞에 위치한 사람이 ATM에서 소모하는 시간만큼을 추가로 기다리기 때문이다.

따라서 이 문제의 효율적인 해법은 오름차순으로 sort한 후에 기다린 시간을 return해주면 된다.

import java.util.Arrays;
import java.util.Scanner;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner scanner = new Scanner(System.in);

        int N = scanner.nextInt();
        int arr[] = new int[N];
        int sum = 0;

        for(int i=0;i<N;i++) {
            arr[i] = scanner.nextInt();
        }
        scanner.close();    
        Arrays.sort(arr);

        for(int j=1;j<=N;j++) {
            for(int k=0;k<j;k++) {
                sum += arr[k];
            }
        }

        System.out.print(sum);
    }

}

위의 코드에서는 Input값을 전달받는데에 Scanner를 이용하였지만, BufferReader를 이용하면 3배 가까이 시간을 줄일 수도 있다.