학습
시험

라운드 로빈 CPU 프로세스

난이도
BEGINNER

문제 설명

라운드 로빈 스케줄링(Round-Robin Scheduling)이란 프로세스들 사이에 우선순위를 두지 않고, 프로세스 대기열의 앞에서부터 순서대로 일정 시간 단위만큼 CPU를 할당하는 방식입니다.
현재 CPU의 프로세스 대기열에는 여러 프로세스가 각각 pid(프로세스 ID) 와 remain(남은 시간)을 가집니다.
라운드 로빈 스케줄링에서 CPU에 할당하는 단위 시간 scheduleTime과 CPU 프로세스 대기열의 모든 프로세스 정보 [pid, remain]이 나열된 processes가 주어질 때, 프로세스가 종료된 순서대로 pid를 반환하는 solution 함수를 작성하시오.

예를 들어 scheduleTime이 4이고, processes가 [[1,5],[2,7],[3,3]] 이라면 아래와 같은 방식으로 프로세스가 진행됩니다.

프로세스 대기열 설명
[[1,5],[2,10],[3,3]] 초기 상태
[[2,10],[3,3],[1,1]] pid=1 프로세스가 4만큼 실행되고 1만큼 남은 상태로 대기열 맨 뒤에 남습니다.
[[3,3],[1,1],[2,6]] pid=2 프로세스가 4만큼 실행되고 6만큼 남은 상태로 대기열 맨 뒤에 남습니다.
[[1,1],[2,6]] pid=3 프로세스가 3만큼 실행되어 완료됩니다.
[[2,6]] pid=1 프로세스가 1만큼 실행되어 완료됩니다.
[[2,2]] pid=2 프로세스가 4만큼 실행되고 2만큼 남은 상태로 대기열 맨 뒤에 남습니다.
[[2,2]] pid=2 프로세스가 2만큼 실행되고 완료됩니다.

따라서 전체 프로세스 중 종료된 순서대로 pid를 나열하면 [3,1,2]입니다.


제한 사항

  • scheduleTime은 1 이상 100 이하의 자연수입니다.
  • processes의 길이는 1 이상 1,000 이하입니다.
  • processes의 원소는 [pid, remain] 형태로 주어집니다.
    • pid는 1 이상 10,000 이하의 자연수입니다.
    • pid가 중복되는 입력은 주어지지 않습니다.
    • remain은 1 이상 10,000 이하의 자연수입니다.

예시 테스트케이스 설명

테스트케이스 번호 T processes return
1 4 [[1,5],[2,10],[3,3]] [3,1,2]
2 2 [[10,1],[1,10]] [10,1]
3 7 [[15,7],[3,7],[8,7]] [15,3,8]

1번 테스트케이스 설명

  • 라운드 로빈 스케줄링에 따라 CPU는 아래와 같이 할당됩니다.

    프로세스 대기열 설명
    [[1,5],[2,10],[3,3]] 초기 상태
    [[2,10],[3,3],[1,1]] pid=1 프로세스가 4만큼 실행되고 1만큼 남은 상태로 대기열 맨 뒤에 남습니다.
    [[3,3],[1,1],[2,6]] pid=2 프로세스가 4만큼 실행되고 6만큼 남은 상태로 대기열 맨 뒤에 남습니다.
    [[1,1],[2,6]] pid=3 프로세스가 3만큼 실행되어 완료됩니다.
    [[2,6]] pid=1 프로세스가 1만큼 실행되어 완료됩니다.
    [[2,2]] pid=2 프로세스가 4만큼 실행되고 2만큼 남은 상태로 대기열 맨 뒤에 남습니다.
    [[2,2]] pid=2 프로세스가 2만큼 실행되고 완료됩니다.
  • 따라서 전체 프로세스 중 종료된 순서대로 pid를 나열한 [3,1,2]를 반환합니다.

2번 테스트케이스 설명

  • 라운드 로빈 스케줄링에 따라 CPU는 아래와 같이 할당됩니다.
프로세스 대기열 설명
[[10,1],[1,10]] 초기 상태
[[1,10]] pid = 10 프로세스가 1만큼 실행되어 완료됩니다.
[[1,8]] pid = 1 프로세스가 2만큼 실행되고 8만큼 남은 상태로 대기열 맨 뒤에 남습니다.
[[1,6]] pid = 1 프로세스가 2만큼 실행되고 6만큼 남습니다.
[[1,4]] pid = 1 프로세스가 2만큼 실행되고 4만큼 남습니다.
[[1,2]] pid = 1 프로세스가 2만큼 실행되고 2만큼 남습니다.
[[1,2]] pid = 1 프로세스가 2만큼 실행되어 완료됩니다.
  • 따라서 종료된 순서대로 pid를 나열하면 [10,1]을 반환합니다.

3번 테스트케이스 설명

  • 라운드 로빈 스케줄링에 따라 CPU는 아래와 같이 할당됩니다. | 프로세스 대기열 | 설명 | | --- | --- | | [[15,7],[3,7],[8,7]] | 초기 상태 | | [[3,7],[8,7]] | pid = 15 프로세스가 7만큼 실행되어 완료됩니다. | | [[8,7]] | pid = 3 프로세스가 7만큼 실행되어 완료됩니다. | | [[8,7]] | pid = 8 프로세스가 7만큼 실행되어 완료됩니다. |

  • 따라서 종료된 순서대로 pid를 나열하면 [15,3,8]을 반환합니다.