[Python][프로그래머스][Level4] 선입 선출 스케쥴링

[Python][프로그래머스][Level4] 선입 선출 스케쥴링

코드

def solution(n, cores):
    if len(cores)>=n:
        return n
    n-=len(cores)
    
    start,end=1,sorted(cores)[-1]*n
    while start<=end:
        middle= (start+end)//2
        num = sum([middle//core for core in cores])
        if num>=n:
            end=middle-1
        else:
            start=middle+1
    
    for idx, core in enumerate(cores):
        n-=(start-1)//core
    
    for idx, core in enumerate(cores):
        if start%core==0:
            n-=1
            if n==0:
                return idx+1

이분탐색 문제다

이분 탐색으로 특정 시간에 각각의 core의 수행 횟수를 더해서 n보다 크거나 같은 최소의 수를 구한다.

start에 해당하는 값을 최소 시간이다.

이때, start보다 1 적은 시간에서 수행 횟수를 n에서 빼준다.

그 다음에 start에서 수행하는 core를 확인하면 답을 알 수 있다.

Discussion and feedback