[BaekJoon] #11399 ATM

현굥·2024년 9월 3일

BaekJoon

목록 보기
23/53

문제이해

이 문제는 사람 수와 각 사람이 돈을 인출하는데 걸리는 시간이 주어지고, 인덱스 별 누적 합의 총합을 구하고, 그 중 가장 작은 값을 출력해내는 문제입니다.
예를들어 배열이 있다고 치면, arr[0] + ( arr[0] + arr[1] ) + ( arr[0] + arr[1] + arr[2] ) ... ( arr[0] + arr[1] + arr[2] + ... arr[n] ) 를 계산하고 그 값 중 가장 작은 값을 구하는 문제입니다.

문제접근

  • 전체 합이 최소가 되려면, 각 부분 합이 최소가 되어야 하므로, 입력된 수가 오름차순으로 정렬되어야 합니다.
  • 정렬을 위해 배열을 선언해주어 Arrays.sort()메소드를 사용해주었습니다.
  • solution함수를 정의하여 배열을 받아 정렬 이후 부분합과 전체합을 구하는 코드를 작성해주었습니다. 부분 합을 위해 sum 변수를, 전체 합을 위해 ans변수를 선언해주었습니다.

code

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
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());
        
        for (int i = 0; i < n; i++) {
            arr[i]=Integer.parseInt(st.nextToken());
        }
        System.out.println(solution(arr));
    }

    public static int solution(int arr[]) {
        Arrays.sort(arr);
        int sum = 0;
        int ans = 0;
        for (int t : arr) {
            sum += t;
            ans += sum;
        }
        return ans;
    }
}

0개의 댓글