Written by
최태열
on
on
[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