ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 백준 11399 ATM
    Programming/Algorithm 2021. 3. 19. 11:09

     

    문제

    사람의 수와 각 사람이 돈을 인출하는 데 걸리는 시간이 주어진다.

    이 때 모든 사람이 돈을 인출하기 위해 대기하는 총 시간의 최솟값을 출력하는 문제이다. 

     

     

    풀이

    인출시간이 빠른 사람이 앞에 오도록해서 사람들의 대기시간을 최소로 만든 뒤에 대기시간의 합을 구하면 된다.

     

     

    코드

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.StringTokenizer;
    
    public class b11399 {
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int N = Integer.parseInt(br.readLine());
    
            int[] times = new int[N];
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int i = 0; i < N; i++) {
                times[i] = Integer.parseInt(st.nextToken());
            }
            Arrays.sort(times);
    
            int sum = times[0], prev = times[0]; // 합, 이전 사람이 인출 끝낸 시간
            for (int i = 1; i < N; i++) {
                int curr = prev + times[i]; // 현재 사람이 인출 끝낸 시간
                sum += curr; // 총합에 더한다.
                prev = curr; // 이전사람변수에 현재사람을 넣고 다음으로...
            }
    
            System.out.println(sum);
        }
    }
    

     

     

     

    'Programming > Algorithm' 카테고리의 다른 글

    [Java] 백준 12852 1로 만들기 2  (0) 2021.03.24
    [Java] 백준 11726 2 x n 타일링  (0) 2021.03.19
    [Java] 백준 1149 RGB 거리  (0) 2021.03.16
    [Java] 백준 10610 30  (0) 2021.03.15
    [Java] 백준 9095 1,2,3 더하기  (0) 2021.03.13

    댓글

Designed by black7375.