본문 바로가기
Language/Java

[백준 | Java] 11399번 ATM

by ㅇ달빛천사ㅇ 2025. 2. 12.
728x90
11399번 / ATM

ATM

🏷️ 관련 주제 : Greedy Sort



💦 나의 시도

정렬, 배열의 0 ~ i 인덱스까지의 합을 인덱스 i에 할당, 모든 원소의 합 구하기

  • 각 사람이 돈을 인출하는 데 필요한 시간의 합의 최솟값을 구하기 위해 인출하는데 걸리는 시간 $P_i$가 짧은 사람부터 돈을 인출하여야 한다.
  • 각 사람이 돈을 인출하는 데 걸리는 시간 $P_i$를 배열에 담아 오름차순 정렬하였을 때, i번째 사람이 돈을 인출하는 데 걸리는 시간은 0 ~ i번 인덱스 원소까지의 총 합만큼이 걸립니다.
    • 저는 입력값을 문자열로 받아 split(" ")하여 문자열 배열을 구하고
      Stream API를 통해 int형 변환 및 오름차순 정렬하여
      int[] times를 구하였습니다.

일일이 0 ~ i번 인덱스 원소까지의 총 합을 구하지 않고

  • 반복문을 통해 1 ~ (N - 1) 범위에서 i번 인덱스의 원소에 (i - 1)번 인덱스의 원소를 할당하면
    배열의 i번 인덱스의 원소는 $P_1$ ~ $P_{i-1}$의 총합이 할당됩니다.
  • 위의 반복문에서 결과값을 반환하기 위한 변수 int total에 배열의 모든 원소를 더해주어 각 사람이 돈을 인출하는 데 필요한 시간의 합의 최솟값을 구할 수 있습니다.


📑제출 기록 및 오답 원인

한번에 제출 성공한 것 정말 오랜만인 것 같다!

💯 해결 방법

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[] times = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).sorted().toArray();
        int total = times[0];

        for (int i = 1; i < N; i++) {
            times[i] += times[i - 1];
            total += times[i];
        }

        System.out.println(total);

    }
}
728x90


Top