[프로그래머스] 입국심사 43238 (JAVA)

dia·2023년 10월 13일
0

입국심사 - 43238

풀이방식

  1. times 배열 정렬
  2. 탐색 범위 초기화:
    start = 1, end = 가장 오래 걸리는 심사관이 모두 심사하는 시간
  3. 이분탐색 진행: n명이 모두 통과하는 시간 구하기
    3-1. 해당 시간 동안 통과하는 최대 인원 수 구하기
    3-2. 통과인원 수가 n명보다 작으면 재탐색 / 크거나 같으면 정답 갱신 및 재탐색
  4. 통과하는 시간을 구하지 못했을 경우, 최대 시간으로 정답 설정

포인트

  1. long 타입 사용
    오버플로우 발생
  2. 탐색 전 times 배열 정렬
    이진탐색을 적용하기 위해서는 정렬이 되어있어야 함
  3. mid < answer 조건
    mid가 더 작을 때만 답이 갱신되어야 함

구현

import java.util.*;

class Solution {
    public long solution(int n, int[] times) {
        long answer = -1;
        
        Arrays.sort(times);
        
        long start = 0; long end = (long)times[times.length-1]*n + 1;
        while(start < end) {
            long mid = (start+end)/2;
            
            long human = 0;
            for(int time : times) { human += (mid / time); }
            
            if(human < n) { start = mid+1; }
            else if(human >= n) { end = mid; answer = mid; }
        }
        
        if(answer == -1) { answer = times[times.length-1] * n; }
        
        return answer;
    }
}

*다른 분들의 코드를 참고하여 작성했습니다

profile
CS 메모장

0개의 댓글