본문 바로가기
Algorithm/BOJ

[백준] 11399번 ATM 자바

by YOONAYEON 2022. 1. 3.
문제 (실버3)

 

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

 

 

 

문제 풀이

 

처음에 순열 함수를 따로 만들어서 모든 순열 경우의 수를 구해서 그 합을 구해 작은 값을 찾아가는 식으로 풀었다.

 

	public static void permutation(int[] arr, int[] output, boolean[] visited, int depth, int n, int r) {
		if(depth == r) {
			int sum = 0;
			for(int i = 0; i < r; i++)
				for(int j = 0; j <= i; j++)
					sum += time[output[j]];
			
			if(sum < result)
				result = sum;
			//System.out.println(sum);
			return;
		}
		
		for(int i = 0; i < n; i++) {
			if(visited[i] != true) {
				visited[i] = true;
				output[depth] = arr[i];
				permutation(arr, output, visited, depth+1, n, r);
				output[depth] = 0;
				visited[i] = false;
			}
		}
	}

 

 

당연히 시간초과가 떴다...^^

최소 합을 구하기 위해 그냥 시간이 적은 사람부터 누적해 나가면 되는 것을 왜 이렇게 풀었는지 모르겠다ㅠ

Arrays.sort()함수를 이용하여 오름차순 정렬하여 누적합을 구해 출력했다.

 

 

 

 

소스 코드

 

public class b_11399 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] time = new int[n];
		int sum = 0;
		
		for(int i = 0; i < n; i++) 
			time[i] = sc.nextInt();
		
		Arrays.sort(time);
		
		for(int i = 0; i < n; i++)
			for(int j = 0; j <= i; j++)
				sum += time[j];
		
		System.out.println(sum);
		sc.close();
	}
}

 

 

'Algorithm > BOJ' 카테고리의 다른 글

[백준] 2573번 빙산 자바  (0) 2022.01.10
[백준] 1987번 알파벳 자바  (0) 2022.01.03
[백준] 1753번 최단경로 자바  (0) 2021.12.07
[백준] 9251번 LCS 자바  (0) 2021.11.29
[백준] 17413번 단어 뒤집기2 자바  (0) 2021.11.27