큐 기본 사용법
문제설명
채점 서버 수 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]
if server['finished_at'] <= cur_time: 여기서 server['finished_at']이 cur_time보다 작은 경우도 있나요?