https://www.acmicpc.net/problem/11399
1. 아이디어
인출하는데 걸리는 시간이 짧은 사람부터 인출을 하는게 전체 인출시간의 합이 최소가 된다는 점을 활용한다.
2. 문제풀이
앞에 인출한 사람이 걸린 시간만큼 뒷사람들이 영향을 받으므로 인출하는데 걸리는 시간이 짧은 사람부터 인출하도록 정렬을 해준다. 이후 정렬된 배열의 누적합 배열을 구하면 각 사람이 인출하는데 걸리는 시간을 구할 수 있고, 누적합 배열의 총합이 인출하는데 걸리는 전체 시간이 된다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int sum = 0;
// 인출하는데 걸리는 시간이 작은 사람부터 줄을 서야 최소
int[] P = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
P[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(P);
// 누적합 배열의 합이 모든 사람이 돈을 인출하는데 걸리는 시간의 합
int[] prefixSum = new int[1 + N];
for (int i = 1; i <= N; i++) {
prefixSum[i] = prefixSum[i - 1] + P[i - 1];
sum += prefixSum[i];
}
System.out.println(sum);
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 1541번 - 잃어버린 괄호 [Java] (0) | 2024.12.02 |
---|---|
[백준] 10430번 - 나머지 [Java] (1) | 2024.12.02 |
[백준] 1026번 - 보물 [Java] (0) | 2024.12.02 |
[백준] 11047번 - 동전 0 [Java] (0) | 2024.12.02 |
[백준] 10820번 - 문자열 분석 [Java] (0) | 2024.12.02 |