알고리즘/백준

백준-11399번/ATM (java)

연향동큰손 2024. 8. 26. 19:57

 

 

문제 이해

 

N명의 사람이 ATM앞에 줄을 서서 돈을 뽑는데 각 사람마다 뽑는데 걸리는 시간이 다르다.

 

EX) 

입력이 아래와 같을때 최소로 걸리는 시간은 다음과 같이 구할 수 있다.

5
3 1 4 3 2

 

1) 오름 차순으로 정렬 ==> 돈을 뽑는데 적은 시간이 걸리는 사람을 먼저 뽑게해서 마지막 사람이 기다리는 시간을 최소화

1 2 3 3 4

 

이렇게 정렬을 하고 돈을 뽑는데 걸리는 시간을 구해주면 다음과 같다.

 

1+(1+2)+(1+2+3)+(1+2+3+3)+(1+2+3+3+4) = 32

 

문제 해결

 

우선 배열에 걸리는 시간들을 입력받고 오름차순으로 정렬시켜줬다.

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

Arrays.sort(arr);

 

 

그 후 이중 반복문을 이용해서 걸리는 시간을 계산해준다.

int time=0;
for(int i=0; i<N; i++){
    for(int j=0; j<i; j++){
        time+=arr[j];
    }
    time+=arr[i];
}
System.out.println(time);

 

 

<전체 코드>

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

public class Problem11399 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int N=scanner.nextInt();

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

        Arrays.sort(arr);

        int time=0;
        for(int i=0; i<N; i++){
            for(int j=0; j<i; j++){
                time+=arr[j];
            }
            time+=arr[i];
        }
        System.out.println(time);
    }
}