{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉힙〉GPU 작업 스케줄러← 이전다음 →
#097 · 힙중간힙 / 우선순위 큐,시뮬레이션

GPU 작업 스케줄러

문제

사내 추론 서버에는 GPU가 한 장뿐이라 작업을 한 번에 하나씩만 처리합니다. i번 작업은 jobs[i] = [요청 시각, 처리 시간] 형태로 주어집니다.

스케줄러는 다음 규칙으로 동작합니다.

  • 시각 0에 GPU는 비어 있습니다.
  • GPU가 비는 순간, 이미 요청된(요청 시각 ≤ 현재 시각) 작업 중 하나를 골라 즉시 시작합니다.
    • 우선순위: 처리 시간이 짧은 작업 → 같으면 요청 시각이 빠른 작업 → 그것도 같으면 번호(인덱스)가 작은 작업
  • 한 번 시작한 작업은 중간에 끊지 않습니다 (비선점).
  • 대기 중인 작업이 하나도 없으면 다음 요청이 도착할 때까지 유휴 상태로 기다립니다.

어떤 작업의 대기 시간 은 처리 시작 시각 - 요청 시각입니다. 모든 작업의 대기 시간 중 최댓값 을 반환하는 solution(jobs) 함수를 작성하세요.

예시

jobs=[[0,3],[1,9],[2,6]] → 8
  0번: 시각 0 시작(대기 0), 시각 3 종료
  대기 중 [1번(처리 9), 2번(처리 6)] → 처리 시간 짧은 2번: 시각 3 시작(대기 1), 시각 9 종료
  1번: 시각 9 시작(대기 8) → 최대 대기 8
 
jobs=[[0,10],[2,5],[3,5]] → 12
  0번: 시각 0 시작, 시각 10 종료
  1번·2번 처리 시간이 같으므로 요청이 빠른 1번: 시각 10 시작(대기 8), 시각 15 종료
  2번: 시각 15 시작(대기 12) → 최대 대기 12
 
jobs=[[0,2],[10,3],[11,1]] → 2
  0번 종료(시각 2) 후 시각 10까지 유휴.
  1번: 시각 10 시작(대기 0), 시각 13 종료 / 2번: 시각 13 시작(대기 2)

제약 조건

  • 1 ≤ jobs.length ≤ 100,000
  • 0 ≤ 요청 시각 ≤ 1,000,000
  • 1 ≤ 처리 시간 ≤ 1,000
  • 반환값은 정수입니다.

시간 복잡도 목표: O(N log N)

참고: TypeScript에는 내장 PriorityQueue가 없습니다. 직접 힙을 구현해야 대형 케이스를 제한 시간 안에 통과할 수 있습니다.

테스트 케이스

예시 1: SJF 기본 — 짧은 작업 우선
입력: jobs = [[0,3],[1,9],[2,6]]
출력: 8
예시 2: 처리 시간 동률 → 요청 빠른 순
입력: jobs = [[0,10],[2,5],[3,5]]
출력: 12
예시 3: 유휴 구간 건너뛰기
입력: jobs = [[0,2],[10,3],[11,1]]
출력: 2
작업 1개 → 대기 0
입력: jobs = [[5,7]]
출력: 0
동시 도착 4개 → 짧은 순 처리
입력: jobs = [[0,4],[0,1],[0,2],[0,3]]
출력: 6
겹침 없음 → 모두 대기 0
입력: jobs = [[0,3],[5,2],[9,4]]
출력: 0
긴 작업 뒤로 짧은 작업 적체
입력: jobs = [[0,100],[1,1],[2,1],[3,1]]
출력: 99
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.