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