← 학습 코스

작업을 한 차례씩 처리해요

C++완성형

한 번에 끝나지 않은 작업은 뒤로 보내요

앞에서는 먼저 들어온 값을 한 번 꺼내 끝냈어요. 이번 큐의 값은 남은 작업을 다시 기다리게 할 수 있어요. 작업 A·B가 대기 중이고 A를 일부만 처리했다면 다음 큐는 B·A예요. 항상 큐 맨 앞을 처리해요.

큐에 작업 번호를 넣고, vector에는 번호별 남은 양을 유지해요. queue<int>의 front는 먼저 기다리던 번호예요. 읽은 번호를 pop한 후, 끝나지 않은 경우에만 뒤로 push해요.

번호의 순서와 남은 양을 나눠 추적해요

작업 0의 양은 5, 작업 1의 양은 2이고 차례마다 최대 3을 처리한다고 해요.

처리 번호 처리 뒤 남은 양 다음 큐 완료 기록
0 2, 2 1, 0 없음
1 2, 완료 0 1
0 완료, 완료 비어 있음 1, 0

번호가 작은 작업이 꼭 먼저 완료될까요? 처음 양이 커서 여러 차례가 필요하면 뒤의 작업이 먼저 끝날 수 있어요. 빈 작업 목록은 큐도 빈 채로 시작하고 빈 완료 기록을 반환해요.

직접 풀어봐요

work[i]는 작업 i의 필요한 양이에요. 처음 큐에는 작업 번호 0~n−1이 순서대로 들어 있어요. 매번 맨 앞 작업을 최대 quantum만큼 처리하고, 아직 남았으면 그 번호를 큐 뒤에 넣어요. 끝난 작업 번호를 완료한 순서대로 반환해요.

n은 050, 각 work 값은 1100, quantum은 1~10이에요. 실행용 입력은 n, n개 work 값, 마지막 줄 quantum이에요. 출력은 완료 번호를 공백으로 구분한 한 줄이고 빈 결과는 빈 줄이에요. 하네스가 입출력을 처리해요.

예시 1: work={5,2}, quantum=3 → [1,0]. 1번 작업이 먼저 끝나고 다음 차례에 0번이 끝나요. 예시 2: work={2,7,4}, quantum=2 → [0,2,1]. 0번·2번·1번 순서로 끝나요.

예시 입력

2
5 2
3

예상 결과

1 0

예시 입력

3
2 7 4
2

예상 결과

0 2 1
핵심 개념
  • stack-queue: 미완료 작업은 큐 뒤로 보내고 완료 순서를 기록해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기