반응형
https://www.acmicpc.net/problem/11399
풀이
이번 문제는 정렬 후에 간단한 식만 만들어주면 해결할 수 있는 문제다.
각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 문제로 i 번째 사람이 돈을 인출하는데 걸리는 시간은 i-1 번째 사람이 돈을 인출하는데 걸리는 시간 + 이전까지의 대기 시간이다.
이전까지의 대기 시간이 짧을수록 필요한 시간이 줄어들 것이다. 즉, i 번째 사람이 돈을 인출하는데 걸리는 시간이 짧은 순서로 정렬하면 된다. 오름차순 정렬이므로 Arrays.sort() 를 이용해서 쉽게 정렬할 수 있다.
<최종코드>
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[] 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 pre = P[0];
int sum = pre;
for (int i=1; i<N; i++) {
pre += P[i];
sum += pre;
}
System.out.println(sum);
}
}
반응형
'알고리즘 > 구현 & 그리디 & 브루트포스' 카테고리의 다른 글
[백준]JAVA - 1034번: 램프 (0) | 2022.11.12 |
---|---|
[백준]JAVA - 1202번: 보석 도둑 (0) | 2022.10.21 |
[백준]JAVA - 1052번: 물병 (0) | 2022.10.08 |
[백준]JAVA - 1002번: 터렛 (0) | 2022.09.28 |
[백준]JAVA - 1652번: 누울 자리를 찾아라 (0) | 2022.09.26 |