[BOJ] 11399 - ATM

최윤서·약 14시간 전
post-thumbnail

[전체 코드]

import java.util.Scanner;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int[] p = new int[n];

        for (int i = 0; i < n; i++) {
            p[i] = sc.nextInt();
        }

        // 오름차순 정렬
        Arrays.sort(p);

        // 누적합 계산
        int totalMinValue = 0;
        int sum = 0;

        for (int i = 0; i < n; i++) {
            sum += p[i]; // 현재 사람까지 걸린 시간
            totalMinValue += sum; // 전체 대기 시간에 더하기
        }

        System.out.println(totalMinValue);
    }
}

[문제 풀이 설명]

입력 받은 배열 p를 오름차순으로 정렬하면, 돈을 인출하는데 걸리는 시간이 적은 순서대로 정렬된다.
그 순서대로! 사람을 세우는 것이 가장 최소값이므로 1. 정렬 2. 누적합 계산을 하면 된다.

[어려웠던 점]

우선, 문제를 봤을 때 모든 경우의 수로 사람들을 세워야겠다는 생각이 먼저 들었다.
그래서 모든 경우의 수를 봐야하기 때문에 생각해낸 알고리즘이 1. 백트래킹, 2. DP 였다. 그래서 DP로 풀고 있었는데, 문제를 다시 보니 정렬을 이용하면 쉽게 풀릴 것 같았다. 그 후로 정렬로 풀기 시작했다.

그리고 아직 Java 문법에 익숙하지 않은 것 같다. Java로 기초적인 문법을 익혀야겠다.

[느낀점]

  • Java 문법 익히기
  • 문제 읽으면서 규칙 찾아내는 연습 꾸준히 하기

0개의 댓글