본문 바로가기
Programming/Programmers

[프로그래머스] 선입 선출 스케줄링(Python)

by 데이터현 2022. 1. 31.

https://programmers.co.kr/learn/courses/30/lessons/12920

 

코딩테스트 연습 - 선입 선출 스케줄링

처리해야 할 동일한 작업이 n 개가 있고, 이를 처리하기 위한 CPU가 있습니다. 이 CPU는 다음과 같은 특징이 있습니다. CPU에는 여러 개의 코어가 있고, 코어별로 한 작업을 처리하는 시간이 다릅니

programmers.co.kr

이진탐색을 활용해야 하는 문제였다.

비슷한 문제를 풀었었는데 떠올리지 못했다.

 

def solution(n,cores):
    if n <= len(cores):
        return n
    n -= len(cores)
    left = 1
    right = max(cores)*n

    while left < right:
        mid = (left+right)//2
        work = 0

        for core in cores:
            work += mid//core

        if work >= n:
            right = mid
        else:
            left = mid + 1

    for core in cores:
        n -= (right-1)//core
    for i in range(len(cores)):
        if right % cores[i] == 0:
            n -= 1
            if n == 0:
                return i + 1

 

댓글