채점 서버 (python)

SeoYng·2020년 9월 5일
0

큐 기본 사용법

👀 깃헙 소스

문제설명
채점 서버 수 n, 코드를 실행하는 데 걸리는 시간을 담은 리스트 exec_times가 solution 함수의 매개변수로 주어집니다. 이때 각 서버가 채점한 코드 수를 리턴하는 solution 함수를 완성해주세요.

예를 들어 채점 서버가 3대이고 큐에는 [3초, 1초, 1초, 2초, 1초]가 걸리는 코드가 있습니다. 이때 세 서버는 다음과 같이 동작합니다.

시각	큐			서버 1	서버 2	서버 3
0	[3, 1, 1, 2, 1, 5]	[]	[]	[]
1	[2, 1, 5]		[3]	[1]	[1]
2	[5]			[3]	[1, 2]	[1, 1]
3	[]			[3]	[1, 2]	[1, 1, 5]

따라서 이때 세 서버가 채점한 코드 수는 각각 [1, 2, 3] 개입니다.

입출력 예

n	exec_times		정답
3	[3, 1, 1, 2, 1, 5]	[1, 2, 3]
3	[10, 10, 1, 1, 1]	[1, 1, 3]

솔루션
exec_times를 큐로 만들고 큐가 빌때까지 time을 증가시킨다
exec_times에서 한개씩 빼서 현재 채점중이지 않은 서버에 push 한다.
:모든 서버를 돌면서 채점 중인지 확인 하는 과정을 반복한다.
finished_at이 현재 시간보다 크면 채점중인 서버이며 push 할 때마다
jobs_done을 하나씩 증가시켜준다.

코드

# 파이썬
from collections import deque

def solution(n, exec_times):
    queue = deque(exec_times)

    servers = [{'finished_at': 0, 'jobs_done': 0} for _ in range(n)]
    cur_time = 0

    while queue:
        for server in servers:
            if not queue:
                break
            if server['finished_at'] <= cur_time:
                server['finished_at'] += queue.popleft()
                server['jobs_done'] += 1
        cur_time += 1
    return [server['jobs_done'] for server in servers]
profile
Junior Web FE Developer

2개의 댓글

comment-user-thumbnail
2021년 4월 9일

if server['finished_at'] <= cur_time: 여기서 server['finished_at']이 cur_time보다 작은 경우도 있나요?

1개의 답글