{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉위상정렬〉레시피 최소 완성 시간← 이전다음 →
#106 · 위상정렬중간위상정렬 (Kahn's algorithm),DAG 최장 경로

레시피 최소 완성 시간

문제

밀키트 회사의 주방에서 새 메뉴를 만듭니다. 레시피는 n개의 공정 으로 쪼개져 있고, 각 공정은 0부터 n-1까지 번호가 매겨져 있습니다.

  • times[i]는 i번 공정을 끝내는 데 걸리는 시간(분)입니다.
  • deps의 각 원소 [a, b]는 "a번 공정은 b번 공정이 완전히 끝난 뒤에 시작할 수 있다"는 뜻입니다.

주방에는 조리사가 넉넉해서, 선행 공정이 모두 끝난 공정은 몇 개든 동시에 시작할 수 있습니다. 시각 0에 선행 공정이 없는 공정들이 일제히 시작하고, 어떤 공정도 시작 가능해진 순간 곧바로 시작하며 한 번 시작하면 중간에 멈추지 않습니다.

모든 공정이 끝나는 최소 시각 을 반환하는 solution(times, deps) 함수를 작성하세요. 선행 관계에 모순(사이클)이 있어 끝낼 수 없는 공정이 하나라도 있으면 -1을 반환합니다.

예시

times=[3,2,4,1], deps=[[1,0],[2,0],[3,1],[3,2]] → 8
  0번은 시각 0에 시작해 3분에 끝남
  1번은 3분에 시작해 5분, 2번은 3분에 시작해 7분에 끝남 (동시 진행)
  3번은 1번·2번이 모두 끝난 7분에 시작해 8분에 끝남
 
times=[5,5,5], deps=[] → 5
  선행 관계가 없으므로 셋 다 시각 0에 동시 시작 → 5분
 
times=[2,3,4], deps=[[1,0],[2,1]] → 9
  일렬로만 진행 가능하므로 2+3+4 = 9분
 
times=[1,2,3], deps=[[0,1],[1,2],[2,0]] → -1
  0→1→2→0 순환이라 어떤 공정도 시작할 수 없음

제약 조건

  • 1 ≤ n = times.length ≤ 100,000
  • 1 ≤ times[i] ≤ 10,000
  • 0 ≤ deps.length ≤ 200,000
  • deps의 각 [a, b]에서 0 ≤ a, b ≤ n-1, a ≠ b이고 같은 쌍이 중복해서 주어지지 않습니다.
  • 반환값은 정수입니다.

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

테스트 케이스

예시 1: 다이아몬드 의존, 1번과 2번이 동시 진행
입력: times = [3,2,4,1], deps = [[1,0],[2,0],[3,1],[3,2]]
출력: 8
예시 2: 선행 관계 없음 → 전부 동시 시작
입력: times = [5,5,5], deps = []
출력: 5
예시 3: 일렬 의존 → 시간 합
입력: times = [2,3,4], deps = [[1,0],[2,1]]
출력: 9
예시 4: 0→1→2→0 사이클 → -1
입력: times = [1,2,3], deps = [[0,1],[1,2],[2,0]]
출력: -1
예시 5: 공정 1개
입력: times = [7], deps = []
출력: 7
예시 6: 긴 단독 공정이 사슬보다 오래 걸림
입력: times = [1,10,2,3,1], deps = [[2,0],[3,2],[4,3]]
출력: 10
예시 7: 두 갈래가 합류하는 DAG의 최장 경로
입력: times = [2,1,4,3,2,5,1], deps = [[1,0],[2,0],[3,1],[3,2],[4,3],[5,2],[6,4],[6,5]]
출력: 12
예시 8: 일부 공정만 사이클에 속해도 -1
입력: times = [1,1,1,1], deps = [[1,0],[2,3],[3,2]]
출력: -1
solution.ts
에디터 로딩 중…

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