티스토리 뷰

알고리즘

11399번 ATM

wlsdl00 2024. 1. 2. 10:20

문제


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

코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());
        String[] input = bf.readLine().split(" ");
        int[] times = new int[N];

        for (int i = 0; i < N; i++) {
            times[i] = Integer.parseInt(input[i]);
        }

        Arrays.sort(times);

        int result = 0;
        int prev = 0;
        for (int i = 0; i < N; i++) {
            result += prev + times[i];
            prev += times[i];
        }
        System.out.println(result);
    }
}

풀이 방법


  • 대기 시간을 내림차 순으로 정렬한다.
  • 누적합을 구한다.

핵심 포인트


  • 데이터에 대한 최소 누적합을 구하는 문제이기 때문에 반드시 내림차순으로 정렬 후 문제를 해결해야한다.

보완할 점 / 느낀 점


  • 문제 자체는 쉬운 문제이나, 처음 문제를 풀 때 누적합을 구하는 부분을 이중 for문을 통해 구했었다. (각 구간별 합을 구해서 더하는 방법)
  • 통과는 하였으나, 분명 O(n)으로 해결할 방법이 있을 것 같아 방법을 수정하였다.
  • 누적합을 구하는 알고리즘에 대해서 확실히 숙지할 필요가 있다.

참고자료


https://st-lab.tistory.com/147

'알고리즘' 카테고리의 다른 글

2217번 로프  (1) 2024.01.03
1931번 회의실 배정  (0) 2024.01.02
2012번 등수 매기기  (0) 2024.01.02
2839번 설탕배달  (1) 2024.01.02
7568번 덩치  (0) 2024.01.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함