미소를뿌리는감자의 코딩

[백준 2024/01/20] 11399번 ATM 본문

코딩 테스트/백준

[백준 2024/01/20] 11399번 ATM

미뿌감 2024. 1. 20. 14:43
728x90

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

 

11399번: ATM

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

www.acmicpc.net

 

1. 접근 방법

이번 문제는 돈을 인출하는 데 걸리는 시간이 적은 사람이 먼저 인출하도록 하면 되는 문제였다.

 

따라서 인출 시간에 따라 다음과 같이 정렬 했을 때,

[1, 2, 3, 4, 5] 소요 시간은 다음의 합과 같았다.

 

1             

1 2          

1 2 3       

1 2 3 4   

1 2 3 4 5

 

즉 5*1 + 4*2 + 3*3 + 2*4 + 1*5 이었다.

 

따라서 걸리는 시간들을 list에 넣고, 내림차순으로 정렬한 후에 for 문을 구성해 주었다.

 

rough draft

2. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Collections;


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

        List<Integer> list = new ArrayList<>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(reader.readLine());

        String line = reader.readLine();
        String[] line_s = line.split("\\s+");

        for(int i =0; i<num;i++){
            list.add(Integer.parseInt(line_s[i]));
        }

        list.sort(Collections.reverseOrder());

        int answer = 0;
        for(int i =0; i<num; i++){
            answer+=(i+1)* list.get(i);
        }

        System.out.println(answer);

    }

}
728x90