문제 설명
라운드 로빈 스케줄링(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]을 반환합니다.