차곡차곡 성 쌓기
article thumbnail

문제

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

 

11399번: ATM

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

www.acmicpc.net

 

접근방법

어떻게 하면 최솟값을 구할 수 있을까 생각을 했을 때, 누적시켜 더하는 특징에서 앞에 나오는 값들이 작을 때 최소가 될 것이다 생각을 했다. 그래서 오름차순 정렬을 이용하기로 하였다. 

 

풀이

입력

입력의 수가 최대 1001개 이므로 비교적 구현이 쉬운 스캐너로 구현하였다.

 	// 입력 받기
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int [] num = new int[N];
        for(int i=0; i<N; i++){
            num[i] = sc.nextInt();
       }

 

오름차순 정렬 - 삽입 정렬

정렬을 아무 정렬 방법이든 사용 가능하지만 책의 내용에 맞춰 삽입 정렬을 이용하였다. 삽입 정렬은 평균 O(n^2)의 시간 복잡도를 가지고 최선의 레코드일 때 O(n)의 시간 복잡도로 정렬이 어느 정도 완료된 상태에서 쓰면 유용한 정렬 기법이다.

	// 정렬 - 삽입 정렬
        int i,j;
        for(i= 1; i< N; i++){
            int key = num[i];
            for(j = i-1; j>=0&&num[j]>key; j--){
                num[j+1] = num[j];
            }
            num[j+1] = key;
        }

 

최솟값 구하기

값을 누적시키기 위해 sum 변수를 이용하여 i번 째 사람이 돈을 뽑는데 걸리는 시간을 구해주고, 모든사람의 시간을 누적 시켜 더하도록 minSum에 sum을 누적시켜 더하였다.

	// 최솟값 구하기
        int minSum = 0;
        int sum = 0;
        for(i=0; i<N; i++){
            sum += num[i];
            minSum += sum;
        }

 

출력

	// 결과 출력
        System.out.println(minSum);

 

전체 코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {

        // 입력 받기
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int [] num = new int[N];
        for(int i=0; i<N; i++){
            num[i] = sc.nextInt();
        }

        // 정렬 - 삽입 정렬
        int i,j;
        for(i= 1; i< N; i++){
            int key = num[i];
            for(j = i-1; j>=0&&num[j]>key; j--){
                num[j+1] = num[j];
            }
            num[j+1] = key;
        }

        // 최솟값 구하기
        int minSum = 0;
        int sum = 0;
        for(i=0; i<N; i++){
            sum += num[i];
            minSum += sum;
        }

        // 결과 출력
        System.out.println(minSum);

    }

}
profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!