Programmers - 선입 선출 스케줄링

SJ0000·2022년 6월 17일

문제 링크

이전에 작업시간으로 이분탐색하는 문제를 풀었었는데 그 문제에서 풀이 아이디어를 얻었다.

  1. 작업 n개를 처리하는데 걸리는 최소시간을 이분탐색으로 구한다.
  2. 해당 시간에 작업을 할당받은 코어들을 구한다
  3. 해당 시간에 처리할 수 있는 작업의 수 - 처리해야 하는 작업의 수(n) 를 X라고 할 때
    2번에서 구한 리스트의 뒤에서 X번째 코어가 n번째 작업을 할당받은 코어이다.
def solution(n, cores):

    def total_process(time):
        result = 0
        for core in cores:
            result += time//core
            if time % core != 0:
                result += 1
        return result

    # 작업 시간을 이분탐색
    l = 0
    r = 10000*50000
    while l < r:
        mid = (l+r)//2
        process = total_process(mid)

        if process >= n:
            r = mid
        else:
            l = mid+1

    time = l
    li = []
    for (i, core) in enumerate(cores):
        if (time-1) % core == 0:
            li.append(i+1)

    diff = total_process(time) - n

    return li[len(li)-1-diff]
profile
잘하고싶은사람

0개의 댓글