알고리즘/구현 & 그리디 & 브루트포스

[백준]JAVA - 11399번: ATM

K.두부 2022. 10. 20. 19:31
반응형

https://www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

풀이

이번 문제는 정렬 후에 간단한 식만 만들어주면 해결할 수 있는 문제다.

각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 문제로 i 번째 사람이 돈을 인출하는데 걸리는 시간은 i-1 번째 사람이 돈을 인출하는데 걸리는 시간 + 이전까지의 대기 시간이다.

 

이전까지의 대기 시간이 짧을수록 필요한 시간이 줄어들 것이다. 즉, i 번째 사람이 돈을 인출하는데 걸리는 시간이 짧은 순서로 정렬하면 된다. 오름차순 정렬이므로 Arrays.sort() 를 이용해서 쉽게 정렬할 수 있다.

 

<최종코드>

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));
        StringTokenizer st;
		
        int N = Integer.parseInt(br.readLine());
        int[] P = new int[N];
		
        st = new StringTokenizer(br.readLine());
        for (int i=0; i<N; i++) {
            P[i] = Integer.parseInt(st.nextToken());
        }
		
        Arrays.sort(P);
		
        int pre = P[0];
        int sum = pre;
		
        for (int i=1; i<N; i++) {
            pre += P[i];
            sum += pre;
        }
		
        System.out.println(sum);
    }
}

 

반응형