[프로그래머스] 입국 심사 (이분탐색)

2025. 4. 27. 23:08·Algorithm

문제 소개

오늘 풀었던 프로그래머스 - 입국심사 문제를 정리합니다.

이 문제는 여러 심사관이 있을 때, 모든 사람이 심사를 완료하는 데 걸리는 최소 시간을 구하는 문제입니다.
심사 시간이 다르기 때문에, 각 심사관별로 동시에 심사할 수 있다는 점을 활용해야 합니다.

문제 링크: 입국심사 - 프로그래머스

사다리 조작 - 백준 15684번


문제 접근 방식

이 문제는 다음과 같은 방식으로 접근했습니다:

  1. 심사 시간이 다양한 상황에서, 가능한 심사 완료 시간을 이분 탐색으로 좁혀갑니다.
  2. 현재 시간(mid) 안에 몇 명을 심사할 수 있는지 계산합니다.
  3. 심사할 수 있는 인원 수가 n명 이상이면 시간을 줄이고, 부족하면 시간을 늘립니다.

해결 과정 및 코드

핵심 아이디어

  1. left: 가능한 최소 시간 (1분)
  2. right: 가능한 최대 시간 (가장 느린 심사관 시간 × 전체 인원 수)
  3. mid: 중간 시간 후보
  4. mid 시간 동안 처리할 수 있는 사람 수를 계산하여, n명 이상 처리 가능한지 확인한다.

코드

시간 복잡도 : O(log(최대 시간) × 심사관 수)

import java.util.*;

class Solution {
    public long solution(int n, int[] times) {
        long left = 1;
        long right = (long) Arrays.stream(times).max().getAsInt() * n;
        long answer = right;

        while (left <= right) {
            long mid = (left + right) / 2;
            long total = 0;
            for (int time : times) {
                total += mid / time;
                if (total >= n) break;
            }
            if (total >= n) {
                answer = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }

        return answer;
    }
}

 

추가: "왜 이분 탐색을 쓰는가?"

  • 이 문제는 '시간'을 대상으로 탐색하는 문제입니다.
  • 시간이 길어질수록 → 더 많은 사람을 심사할 수 있습니다. (단조 증가)
  • "시간"에 대해 단조성을 가지기 때문에 → 이분 탐색을 쓸 수 있는 겁니다.
  • 이분 탐색의 핵심은:
    "어떤 기준(mid 시간)에서 가능한지/불가능한지" 를 빠르게 판단하는 것!

'Algorithm' 카테고리의 다른 글

[프로그래머스] 단어 변환 (BFS)  (0) 2025.04.28
[프로그래머스] 징검다리 (이분탐색)  (0) 2025.04.28
[프로그래머스] H-Index (정렬)  (0) 2025.04.27
[프로그래머스] 가장 큰 수 풀이 (정렬)  (0) 2025.04.26
[프로그래머스] K번째 수 풀이 (정렬)  (0) 2025.04.26
'Algorithm' 카테고리의 다른 글
  • [프로그래머스] 단어 변환 (BFS)
  • [프로그래머스] 징검다리 (이분탐색)
  • [프로그래머스] H-Index (정렬)
  • [프로그래머스] 가장 큰 수 풀이 (정렬)
Celion
Celion
오늘도 평소처럼 화이팅!
  • Celion
    Orion Log
    Celion
  • 전체
    오늘
    어제
    • 전체 글 (144)
      • Uncompiled Thoughts (8)
        • 네이버 부스트캠프 10기 (5)
      • CS 기초부터 한 걸음씩 (34)
      • Code Odyssey (22)
      • Algorithm (77)
        • Coding Test Records (63)
      • Git (3)
      • reference (0)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 태그

    시뮬레이션
    greedy
    Kotlin
    프로그래머스
    코테
    문법정리
    Level3
    java
    알고리즘고득점kit
    boostcamp
    Level2
    백준
  • 최근 글

  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
Celion
[프로그래머스] 입국 심사 (이분탐색)
상단으로

티스토리툴바