스케줄러
면접 대비시간 제한2초메모리 제한256 MB
각 초마다 p_i + t_i가 가장 큰 프로세스를 고르고 동률이면 번호가 작은 쪽을 실행하는 스케줄러를 T초 동안 모델링해 프로세스별 실행 시간을 구한다.
문제
멀티태스킹 운영체제 <>에는 개의 프로세스가 실행되고 있다. 각 프로세스에는 우선순위 가 주어지며, 이 값은 프로세스가 얼마나 자주 실행되는지에 영향을 준다. 시스템에는 작업을 실행할 코어가 하나뿐이므로, 각 프로세스의 우선순위를 고려해 CPU 시간을 분배해야 한다.
매 순간 어떤 프로세스를 실행할지 정하는 알고리즘은 다음과 같다. 각 프로세스에는 우선순위 외에도 카운터 가 있다. 처음에는 모든 가 0이다. 그런 다음 매초마다:
- 의 값이 최대인 프로세스들을 고른다.
- 그런 프로세스가 여러 개라면 번호 가 가장 작은 프로세스를 고른다.
- 고른 프로세스 를 1초 동안 실행한다.
- 고른 프로세스 의 를 0으로 만든다.
- 나머지 모든 프로세스의 를 1씩 증가시킨다.
운영체제의 동작을 초 동안 모델링하여 각 프로세스가 몇 초 동안 실행되었는지 계산하라. 모든 계산과 프로세스 전환은 즉시 이루어지므로, 각 프로세스의 실행 시간은 정수 초이다.
입력
첫째 줄에 운영체제의 프로세스 수 과 모델링할 시간 가 공백으로 구분되어 주어진다 (, ).
둘째 줄에 개의 정수 가 공백으로 구분되어 주어진다. 는 프로세스의 우선순위이다 ().
출력
첫째 줄에 각 프로세스가 실행된 시간을 나타내는 개의 정수를 공백으로 구분하여 출력한다.