본문 바로가기

컴퓨터/백준

JAVA - 백준 알고리즘 - 11399 ATM

반응형

이 문제는 백준 단계별 풀어보기 그리디알고리즘에 분류된 문제이다.

 

이 문제는 정렬을 사용하면 쉽게 풀 수 있다.

 

N번째 사용자가 ATM사용을 마무리하는 시간은 

첫번째 사용자가 이용하는데 걸린 시간 + 두번째 사용자가 이용하는데 걸린 시간 + 번째 사용자가 이용하는데 걸린 시간 + --- N번째 사용자가 이용하는데 걸린 시간 이기때문에 오름차순 정렬시 N번째 사용자가 ATM사용을 마무리하는 시간이 최소가 된다.

 

Arrays.sort() 를 이용하여 오름차순 정렬을 하였다.

 

만약 오름차순이 아닌 다른 정렬기준을 사용하는 문제였다면 Comparator을 이용하여 정렬기준을 구현하면 된다.

 

 

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

	static int N, result, time;
	static int[] arr;

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

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		N = Integer.parseInt(br.readLine());
		arr = new int[N];
		result = 0;
		String str = br.readLine();
		StringTokenizer st = new StringTokenizer(str, " ");
		
		for (int i = 0; N > i; ++i) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		Arrays.sort(arr);

		for (int i = 0; N > i; ++i) {
			int j = i;
			time = arr[j];
			while (j != 0) {
				j--;
				time += arr[j];
			}
			result = result + time;
		}
		System.out.print(result);
	}
}
반응형