99클럽 코테 스터디 17일차 TIL - 작업(백준 #2056)

2024. 11. 13. 13:00·99클럽 코테 스터디

❇️오늘의 학습 키워드 : 작업(백준 #2056)

문제

수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다.

몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해 반드시 먼저 완료되어야 할 작업들이 있다. 이 작업들은 번호가 아주 예쁘게 매겨져 있어서, K번 작업에 대해 선행 관계에 있는(즉, K번 작업을 시작하기 전에 반드시 먼저 완료되어야 하는) 작업들의 번호는 모두 1 이상 (K-1) 이하이다. 작업들 중에는, 그것에 대해 선행 관계에 있는 작업이 하나도 없는 작업이 반드시 하나 이상 존재한다. (1번 작업이 항상 그러하다)

모든 작업을 완료하기 위해 필요한 최소 시간을 구하여라. 물론, 서로 선행 관계가 없는 작업들은 동시에 수행 가능하다.

입력

첫째 줄에 N이 주어진다.

두 번째 줄부터 N+1번째 줄까지 N개의 줄이 주어진다. 2번째 줄은 1번 작업, 3번째 줄은 2번 작업, ..., N+1번째 줄은 N번 작업을 각각 나타낸다. 각 줄의 처음에는, 해당 작업에 걸리는 시간이 먼저 주어지고, 그 다음에 그 작업에 대해 선행 관계에 있는 작업들의 개수(0 ≤ 개수 ≤ 100)가 주어진다. 그리고 선행 관계에 있는 작업들의 번호가 주어진다.

출력

첫째 줄에 모든 작업을 완료하기 위한 최소 시간을 출력한다.

예제 입력 1 

7
5 0
1 1 1
3 1 2
6 1 1
1 2 2 4
8 2 2 4
4 3 3 5 6

예제 출력 1 

23

정답 코드

from collections import deque
import sys
input = sys.stdin.readline

n = int(input())
indegree = [0] * (n+1) # 선행 작업 개수 기록
graph = [[] for _ in range(n+1)] # 후행 작업들의 리스트
dp = [0] * (n+1) # 각 작업이 완료되기까지 필요한 최소 시간
t = [0] # 각 작업의 소요 시간 저장

for i in range(1, n+1):
    array = list(map(int, input().split()))
    t.append(array[0])
    if array[1] != 0: # 선행 작업이 있는 경우
        for j in range(2, len(array)):
            graph[array[j]].append(i)
            indegree[i] += 1

q = deque()
# 선행 작업이 없는 작업을 큐에 삽입
for i in range(1, n+1):
    if indegree[i] == 0:
        q.append(i)
        dp[i] = t[i] # 선행 작업 없으므로 본인 수행 시간만

while q:
    now = q.popleft()
    for i in graph[now]:
        indegree[i] -= 1
        dp[i] = max(dp[now] + t[i], dp[i]) # 기존의 값과 현재의 작업을 거칠 경우 비교 ->최댓값 갱신
        if indegree[i] == 0: # 선행 작업을 모두 완료했을 경우
            q.append(i) # 마지막 선행 작업 번호를 넣어 다음 작업 수행(모든 선행작업이 완료되었으므로 준비됐음)
print(max(dp))

❇️오늘의 회고

  - 어렵다...힌트와 정답 코드를 참고해도 잘 모르겠어서 주석을 열심히 달아봤다.

  - 코딩실력도 점진적으로 상승하는 게 아닌 그 경지가 있을 거라 믿고 우직하게 나아가본다...

  - 내일 11시, 문제를 풀기 전에 위 문제를 한번 더 복습하고 내일 문제에 사용된 알고리즘에 대해서 공부할 것이다!🙂

저작자표시 (새창열림)

'99클럽 코테 스터디' 카테고리의 다른 글

99클럽 코테 스터디 19일차 TIL - 소용돌이 예쁘게 출력하기(백준 #1022)  (3) 2024.11.15
99클럽 코테 스터디 18일차 TIL - 센서(백준 #2212)  (0) 2024.11.14
99클럽 코테 스터디 16일차 TIL - 비슷한 단어(백준 #2179)  (4) 2024.11.12
99클럽 코테 스터디 15일차 TIL - 미로만들기(백준 #2665)  (2) 2024.11.12
99클럽 코테 스터디 14일차 TIL - 거스름돈(백준 #14916)  (1) 2024.11.11
'99클럽 코테 스터디' 카테고리의 다른 글
  • 99클럽 코테 스터디 19일차 TIL - 소용돌이 예쁘게 출력하기(백준 #1022)
  • 99클럽 코테 스터디 18일차 TIL - 센서(백준 #2212)
  • 99클럽 코테 스터디 16일차 TIL - 비슷한 단어(백준 #2179)
  • 99클럽 코테 스터디 15일차 TIL - 미로만들기(백준 #2665)
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (382)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    99클럽
    코딩테스트준비
    개발자취업
    Til
    항해99
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
99클럽 코테 스터디 17일차 TIL - 작업(백준 #2056)
상단으로

티스토리툴바