-
[Java] 백준 11399 ATMProgramming/Algorithm 2021. 3. 19. 11:09
문제
사람의 수와 각 사람이 돈을 인출하는 데 걸리는 시간이 주어진다.
이 때 모든 사람이 돈을 인출하기 위해 대기하는 총 시간의 최솟값을 출력하는 문제이다.
풀이
인출시간이 빠른 사람이 앞에 오도록해서 사람들의 대기시간을 최소로 만든 뒤에 대기시간의 합을 구하면 된다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class b11399 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] times = new int[N]; StringTokenizer st = new StringTokenizer(br.readLine()); for (int i = 0; i < N; i++) { times[i] = Integer.parseInt(st.nextToken()); } Arrays.sort(times); int sum = times[0], prev = times[0]; // 합, 이전 사람이 인출 끝낸 시간 for (int i = 1; i < N; i++) { int curr = prev + times[i]; // 현재 사람이 인출 끝낸 시간 sum += curr; // 총합에 더한다. prev = curr; // 이전사람변수에 현재사람을 넣고 다음으로... } System.out.println(sum); } }
'Programming > Algorithm' 카테고리의 다른 글
[Java] 백준 12852 1로 만들기 2 (0) 2021.03.24 [Java] 백준 11726 2 x n 타일링 (0) 2021.03.19 [Java] 백준 1149 RGB 거리 (0) 2021.03.16 [Java] 백준 10610 30 (0) 2021.03.15 [Java] 백준 9095 1,2,3 더하기 (0) 2021.03.13 댓글