public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] arr = new int[num];
for(int i = 0 ; i < num ; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
int pre_sum = 0;
int sum = 0;
for(int i = 0 ; i < num ; i++) {
pre_sum += arr[i]; // pre_sum = pre_sum + arr[i];
sum += pre_sum; // sum = sum + pre_sum
}
sc.close();
System.out.println(sum);
}
}
정렬을 이용하면 아주 쉽게 풀 수 있는 문제다. 입력받을 수만큼 배열을 만들고 arr [0] ~ arr [num -1]까지 각 사람마다 걸리는 시간을 저장해주었다. Arrays.sort() 메서드를 이용해서 오름차순으로 정렬을 하여 문제를 해결했다.
여기서 pre_sum과 sum 2가지 변수를 선언했다.
pre_sum은 개인이 ATM기를 사용하기 위해 걸리는 시간을 구하기 위해서 선언했다.
sum은 개인이 걸린 시간을 더해 총합을 구하기 위해 선언했다. 결국 문제를 해결하기 위해 필요한 것은 sum이다.
예를 들어, arr [5] = { 3 , 1 , 4 , 3 , 2 }를 입력받는다면 정렬을 통해 { 1 , 2 , 3 , 3 , 4 }로 예쁘게 정렬이 된다.
첫 번째 사람은 1 = 1
두 번째 사람은 1 + 2 = 3
세 번째 사람은 1 + 2 + 3 = 6
네 번째 사람은 1 + 2 + 3 + 3 = 9
다섯 번째 사람은 1 + 2 + 3 + 3 + 4 = 13
sum을 계산해보면 1 + 3 + 6 + 9 + 13 = 32라는 최솟값을 구할 수 있다.
'문제풀이 > 백준' 카테고리의 다른 글
백준 10828. 스택(JAVA) (0) | 2022.03.10 |
---|---|
백준 8958. OX퀴즈(JAVA) (0) | 2022.03.08 |
백준 2839. 설탕 배달(JAVA) (0) | 2022.03.07 |
백준 2490. 윷놀이(JAVA) (0) | 2022.03.06 |
백준 1009. 분산처리(JAVA) (0) | 2022.03.06 |