https://school.programmers.co.kr/learn/courses/30/lessons/43238
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
시간의 최솟값을 구해야하고, 범위로 알 수 있듯 이분탐색 문제였다.
문제를 읽으면서 우선 시간을 mid로 설정하고 구하면 되겠다 싶었는데, 문제는 조건을 어떻게 설정하냐 였다.
주어신 심사대에서 처리 가능한 인원수 = 현재 주어진 시간(mid) / 각 심사대에서 걸리는 시간 을 이용하면 되는 문제였다.
(즉, 만약 30시간이 걸린다고 했을 때 주어진 테케에서는 1번 심사대: 30/7 = 4.XX명, 2번 심사대: 30/10 = 3명으로 최대 7명 처리 가능한 것이다.)
이렇게 구현해서 제출했으나 히든테케의 절반이 틀렸고, 확인 결과 자료형으로 인한 오버플로우 문제였다.
따라서 int의 범위를 넘어갈 것 같은 부분들을 long으로 다 변경해주었더니 통과 했다!
<제출 코드>
import java.util.*;
class Solution {
static long answer = Long.MAX_VALUE;;
static int len;
public static void binarySearch(long start, long end, long n, int[] times){
if(start > end) return;
long mid = (start + end) / 2;
long num = 0;
for(int i=0; i<len; i++){
num += mid / times[i]; // 해당 예상 시간에 따른 처리 가능한 인원 수 계산
}
if(num >= n) {
answer = Math.min(answer, mid);
binarySearch(start, mid-1, n, times);
}
else binarySearch(mid+1, end, n, times);
}
public long solution(int n, int[] times) {
len = times.length;
Arrays.sort(times);
binarySearch(1, (long)n*times[len-1], n, times);
return answer;
}
}
'코테 > 프로그래머스' 카테고리의 다른 글
99클럽 코테 스터디 7일차 TIL DFS(모음사전) (0) | 2024.11.03 |
---|---|
[프로그래머스] 284531 노선별 평균 역 사이 거리 조회하기 (MySQL) (0) | 2024.11.03 |
[프로그래머스] 주차 요금 계산 (Java) (0) | 2023.12.15 |
[프로그래머스] 메뉴 리뉴얼 (Java) (0) | 2023.12.14 |
[프로그래머스] 두 큐 합 같게 만들기 (Java) (0) | 2023.12.13 |