{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉위상정렬〉배포 파이프라인 최소 단계← 이전다음 →
#096 · 위상정렬어려움위상정렬 레벨,순환 탐지

배포 파이프라인 최소 단계

문제

배포 파이프라인에는 0번부터 n-1번까지 번호가 붙은 작업 n개가 있습니다. 빌드 서버는 작업을 몇 개든 동시에 실행할 수 있지만, 앞선 작업의 산출물을 기다려야 하는 작업은 같은 단계에서 함께 실행할 수 없습니다.

의존 관계는 deps[i] = [x, y] 꼴로 주어지며, "작업 x가 완전히 끝나야 작업 y를 시작할 수 있다" 는 뜻입니다.

파이프라인은 단계(stage)로 나누어 실행합니다. 한 단계에서는 그 시점까지 선행 작업이 모두 끝난 작업들을 전부 동시에 실행하고, 그 단계가 끝나야 다음 단계로 넘어갑니다.

모든 작업을 끝내는 데 필요한 최소 단계 수 를 반환하는 solution(n, deps) 함수를 작성하세요. 의존 관계가 순환해 어떤 순서로도 전부 실행할 수 없다면 -1을 반환합니다.

예시

n=5, deps=[[0,2],[0,3],[2,4],[3,4]] → 3
  1단계: 0, 1   (선행 작업이 없음 — 1은 아무 의존도 없는 독립 작업)
  2단계: 2, 3   (0이 끝나야 시작 가능)
  3단계: 4      (2와 3이 모두 끝나야 시작 가능)
 
n=3, deps=[[0,1],[1,2],[2,0]] → -1
  0 → 1 → 2 → 0으로 이어져 시작할 수 있는 작업이 하나도 없습니다.
 
n=4, deps=[] → 1
  의존이 없으므로 네 작업을 한 단계에서 모두 실행합니다.

제약 조건

  • 1 ≤ n ≤ 100,000
  • 0 ≤ deps.length ≤ 200,000
  • deps[i] = [x, y]에서 0 ≤ x, y ≤ n-1 이고 x ≠ y
  • 같은 의존 쌍이 중복해서 주어질 수 있습니다
  • 어떤 작업과도 의존 관계가 없는 독립 작업이 있을 수 있습니다

시간 복잡도 목표: O(n + deps.length)

테스트 케이스

예시 1: 1단계 {0,1} → 2단계 {2,3} → 3단계 {4}
입력: n = 5, deps = [[0,2],[0,3],[2,4],[3,4]]
출력: 3
예시 2: 0→1→2→0 순환 → -1
입력: n = 3, deps = [[0,1],[1,2],[2,0]]
출력: -1
예시 3: 의존이 없으면 전부 동시에 → 1단계
입력: n = 4, deps = []
출력: 1
일렬 의존 — 단계 수가 작업 수와 같음
입력: n = 5, deps = [[0,1],[1,2],[2,3],[3,4]]
출력: 5
가지가 합류하는 파이프라인
입력: n = 7, deps = [[0,3],[1,3],[1,4],[3,5],[4,5],[5,6],[2,6]]
출력: 4
일부만 순환해도 전체 불가 → -1
입력: n = 6, deps = [[0,1],[1,2],[2,1],[3,4]]
출력: -1
엣지: 작업 1개
입력: n = 1, deps = []
출력: 1
엣지: 같은 의존 쌍이 중복으로 주어짐
입력: n = 5, deps = [[0,1],[0,1],[0,1],[1,2]]
출력: 3
solution.ts
에디터 로딩 중…

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