본문 바로가기
백준

[백준] 11399번 : ATM – JAVA [자바]

by Hongwoo 2022. 7. 11.
반응형

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

 

11399번: ATM

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 11399번 ATM은 실버 4 난이도의 그리디 및 정렬 문제이다. 이 문제에서는 사람의 수 N이 주어지고 각 사람당 돈을 인출하는 데 걸리는 시간 Pi가 주어진다. 이때 모든 사람이 돈을 인출하는 데 걸리는 시간의 합의 최솟값을 출력하면 된다. 

 

이 문제는 의외로 간단하다. 바로 각 사람당 돈을 인출하는 데 걸리는 시간 Pi를 먼저 배열로 입력받는다. 그리고 자바에서 기본으로 제공되는 Arrays.sort(배열)을 이용해서 배열을 오름차순으로 정렬한다. 그리고 걸리는 총 시간하고 더할 시간 변수를 각각 sum과 add로 선언한다.

 

간단한 예를 한번 들어보겠다. 1번 사람이 1분 걸리고 2번 사람이 2번 걸린다고 하겠다. 그러면 우선 1번 사람은 1분 동안 돈을 인출한다. 그러면 sum = 1이 된다. 그다음 사람은 이미 1분을 기다렸으므로 인출하는 데는 총 1 + 2, 즉 3분이 걸린 것이다. 여기에서 sum에 3분을 더해준다.

 

이 예시에서 볼 수 있듯이 sum = sum + add + arr [i]가 답이 된다. 따라서 int i = 0부터 i < n까지 for-loop을 돌린다. 그리고 각 i마다 sum = sum + add + arr [i]를 해주면 최솟값을 구할 수 있게 된다.

 


  • 코드

 

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));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        // Pi 값들 입력 받기
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        //배열을 오름차순으로 정렬
        Arrays.sort(arr);
        int sum = 0;  //총 합
        int add = 0;  //더할 수
        for (int i = 0; i < n; i++) {
            add += arr[i];
            sum += add;
        }
        System.out.print(sum);
    }
}

 

 

반응형

댓글