https://school.programmers.co.kr/learn/courses/30/lessons/43238
문제 풀이
- times를 오름차순 정렬한다.
- 가장 큰 시간(times의 마지막 인덱스)에다가 n을 곱해서 가장 오래 걸리는 경우의 시간을 구한다.
즉, 모든 사람이 가장 오래 걸리는 시간의 입국심사대를 가는 상황이다. - 시작 시간(start)과 가장 오래 걸리는 시간(end)을 반으로 나눈 값을 mid라는 변수에 저장한다.
- times 배열을 순회하며 mid 변수를 times 배열의 요소로 나누어서 completed라는 변수에 더한다.
즉, mid 시간 동안에 입국 심사를 받을 수 있는 사람 수를 세는 과정이다. - completed라는 변수의 크기가 n보다 작으면, 그 mid 시간동안 n명의 입국심사를 모두 할 수 없음을 의미한다.
- 따라서 mid의 값을 크게 하기 위해 start를 mid + 1로 설정한다
- 반대로 completed의 크기가 n보다 크면 그 mid 시간동안 n명의 입국심사를 모두 할 수 있다는 것인데,
입국심사를 다 하고 시간이 남았을수도 있으므로 end를 mid - 1로 설정한다. - start 값이 end 값보다 커지면 멈춘다.
코드
import java.util.*;
class Solution {
public long solution(int n, int[] times) {
long answer = 0;
Arrays.sort(times);
long start = 0;
long end = (long)n * times[times.length - 1];
while(start <= end) {
long mid = (start + end) / 2;
long completed = 0;
for(int i = 0; i < times.length; i++) {
completed += mid / times[i];
}
if (completed < n) {
start = mid + 1;
} else {
end = mid - 1;
answer = end;
}
}
return answer + 1;
}
}
'Development > PS' 카테고리의 다른 글
[그리디] 백준 13904번 과제 java 풀이 (0) | 2024.05.21 |
---|---|
[SWEA] [S/W 문제해결 기본] 3일차 - 회문1 Java 풀이 (0) | 2024.05.16 |
[String] [한양대 HCPC 2023] X marks the Spot Java 풀이 ( + 시간 초과 해결) (0) | 2024.02.01 |
[Array] Softeer(소프티어) level 3 우물 안 개구리 Java 풀이 (0) | 2024.01.31 |
[Greedy] Softeer(소프티어) level 2 진정한 효도 Java 풀이 (0) | 2024.01.31 |