문제 이해
N명의 사람이 ATM앞에 줄을 서서 돈을 뽑는데 각 사람마다 뽑는데 걸리는 시간이 다르다.
EX)
입력이 아래와 같을때 최소로 걸리는 시간은 다음과 같이 구할 수 있다.
5
3 1 4 3 2
1) 오름 차순으로 정렬 ==> 돈을 뽑는데 적은 시간이 걸리는 사람을 먼저 뽑게해서 마지막 사람이 기다리는 시간을 최소화
1 2 3 3 4
이렇게 정렬을 하고 돈을 뽑는데 걸리는 시간을 구해주면 다음과 같다.
1+(1+2)+(1+2+3)+(1+2+3+3)+(1+2+3+3+4) = 32
문제 해결
우선 배열에 걸리는 시간들을 입력받고 오름차순으로 정렬시켜줬다.
int[] arr = new int[N];
for(int i=0; i<N; i++){
arr[i]=scanner.nextInt();
}
Arrays.sort(arr);
그 후 이중 반복문을 이용해서 걸리는 시간을 계산해준다.
int time=0;
for(int i=0; i<N; i++){
for(int j=0; j<i; j++){
time+=arr[j];
}
time+=arr[i];
}
System.out.println(time);
<전체 코드>
import java.util.Arrays;
import java.util.Scanner;
public class Problem11399 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N=scanner.nextInt();
int[] arr = new int[N];
for(int i=0; i<N; i++){
arr[i]=scanner.nextInt();
}
Arrays.sort(arr);
int time=0;
for(int i=0; i<N; i++){
for(int j=0; j<i; j++){
time+=arr[j];
}
time+=arr[i];
}
System.out.println(time);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준-2875번/대회 or 인턴 (java) (0) | 2024.10.03 |
---|---|
백준-1541번/잃어버린 괄호 (java) (0) | 2024.10.01 |
백준-1931번/회의실 배정 (java) (0) | 2024.08.23 |
백준-11047번/동전 0 (java) (2) | 2024.08.21 |
백준-10026번/적록색약 (java) (0) | 2024.08.13 |