목차

선입 선출 스케줄링

ps
링크programmers.co.kr/…
출처프로그래머스
문제 번호12920
문제명선입 선출 스케줄링
레벨Level 4
분류

파라메트릭 서치

시간복잡도O(mlog(nk/m))
인풋사이즈n<=50000, m<=10000, k<=50000
사용한 언어Python
해결날짜2020/12/30

풀이

코드

"""Solution code for "Programmers 12920. 선입 선출 스케줄링".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/12920
- Solution link: http://www.teferi.net/ps/problems/programmers/12920
"""

from teflib import algorithm


def solution(n, cores):

    def predicate(t):
        work_count = sum((t // core) + 1 for core in cores)
        return work_count >= n

    t = algorithm.binary_search(0, min(cores) * n, predicate)
    starting_cores_at_t = [i for i, core in enumerate(cores) if t % core == 0]
    started_before_t = sum(((t - 1) // core) + 1 for core in cores)
    return starting_cores_at_t[n - started_before_t - 1] + 1