알고리즘 문제풀이/백준

#11399 : ATM

모항 2022. 2. 24. 09:09

풀이방법

사용된 것:

정렬

동적 프로그래밍(DP)

 

2022.02.24

이 문제는 DP를 사용하기에 적합하다.

n번째 사람의 최종 소요시간은 n-1번째 사람의 최종 소요시간에 자신의 개인 소요시간을 더한 것이다.

즉 앞사람의 최종 소요시간을 구하는 것이 뒷사람의 최종 소요시간을 구하는 문제의 부분 과제이다.

 

사람들의 개인 소요시간을 담은 배열을 오름차순으로 정렬한 뒤, DP를 이용해 앞 사람부터 차곡차곡 수를 더해가며 값을 기록해주면 된다.

 

코드

언어(2022.02.24)

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;
	static int[] people;
	static StringTokenizer st;
	static int sum;
	
	static int dp(int cur) {
		if(cur == 0) {
			return people[0];
		}
		people[cur] += dp(cur-1);
		return people[cur];
	}
	
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		people = new int[n];
		//각 사람별 소요시간 읽어오기
		st = new StringTokenizer(br.readLine());
		for(int i = 0; i<n; i++) {
			people[i] = Integer.parseInt(st.nextToken());
		}
		//오름차순으로 정렬
		Arrays.sort(people);
		//각 사람마다 인출에 걸리는 총 시간을 구하기
		dp(people.length -1);
		//합 구하여 출력
		sum = 0;
		for(int i = 0; i<n; i++) {
			sum += people[i];
		}
		System.out.print(sum);
	}

}

 

Java(2022.03.20, 코드 개선 및 E-PPER 제출용 solution 함수 형식)

	public static int solution(int [] time, int n){
		int answer =0;
	
		Arrays.sort(time);
		
		int dp = 0;
		
		for(int i = 0; i<n; i++){
			dp += time[i];
			answer += dp;
		}
		
		return answer;
	}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#20921 : 그렇고 그런 사이  (0) 2022.02.24
#23559 : 밥  (0) 2022.02.24
#15681 : 트리와 쿼리  (0) 2022.02.23
#11726 : 2 x n 타일링  (0) 2022.02.22
#1931 : 회의실 배정  (0) 2022.02.14