PS

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

1223v 2024. 10. 30. 22:41

https://school.programmers.co.kr/learn/courses/30/lessons/43238

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

아주 최악의 상황을 고려해도 최대 시간 * 사람 수 내에 다 들어옴으로 end = 최대 시간 * 사람 수

시작은 1

 

중간값(정답 시간)을 배열 내 시간으로 나누면 그 시간에 들어갈 수 있는 인원의 총 수가 나온다.

그 값이 기존 사람수보다 많다면 값이 너무 커 사람이 많이 들어온 것이므로 end값을 줄인다.

 

만약 그 값이 기존 사람 수 보다 적다면, 값이 너무 작아 사람이 많이 못들어온 것이므로 start 값을 높인다.

 

def solution(n, times):
    answer = 0
    start = 1
    end = max(times) * n

    while start <= end:
        mid = int((start + end) / 2)
        result = 0
        for i in times:
            result += mid // i

            if result >= n:
                break

        if result >= n:
            answer = mid
            end = mid - 1

        else:
            start = mid + 1

    return answer

 

 

회고.

사람 수(N)가 정해져 있어서 N값을 비교해 최소 시간을 탐색하는 비교문을 구성하는게 아직 미흡한 것 같다...