본문 바로가기
JAVA/Coding Test Study

[Lv.3] 입국심사 : Java

by ♡˖GYURI˖♡ 2024. 4. 5.
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

바로 전에 이진탐색 문제를 풀어서 자신있는 상태였는데, 이젠 디테일한 부분들이 헷갈린다ㅏ...

 

헷갈렸던 포인트들

  • 사람 수를 조절이 아니라 (고정되어 있음) 시간 조절!
  • 반환형이 long이니 그에 맞춰서 long 변수들 만들기!
  • max = mid - 1 / min = mid + 1

 

그래도 어찌저찌 풀어냈다...!

  1. times를 sort한다.
  2. min = 0, max = times[times.length - 1] * (long)n = 가~장 오래 걸리는 시간
  3. mid 값 조절하며 체크
    • mid 값을 times[i]로 나눠가며 심사 가능한 사람의 수를 구함
      • e.g. mid = 3 times = {5, 8, 10} 
      • count = 5/3 + 8/3 + 10/3 = 1 + 2 + 3 = 6
      • 최대 6명 심사 가능

 

문제풀이

import java.util.*;

class Solution {
    public long solution(int n, int[] times) {
        long answer = 0;

        Arrays.sort(times);

        long min = 0;
        long max = times[times.length - 1] * (long)n;

        while (min <= max) {
            long mid = (min + max) / 2;
            long people = cal(mid, times);

            if (people >= n) {
                max = mid - 1;
                answer = mid;
            } else {
                min = mid + 1;
            }
        }

        return answer;
    }

    public long cal(long mid, int[] times) {
        long count = 0;

        for (int i = 0; i < times.length; i++) {
            count += mid / times[i];
        }

        return count;
    }
}