본문 바로가기
Problem Solving/BOJ

[BOJ][Python]1005 풀이

by NoiB 2023. 11. 24.
반응형

https://www.acmicpc.net/problem/1005

 

1005번: ACM Craft

첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부

www.acmicpc.net

import sys; ssr = sys.stdin.readline
sys.setrecursionlimit(10000)

def f(node):
    if dp_delay[node] == -1:
        results = []
        for child in build[node]:
            child_delay = f(child)
            results.append(child_delay)
        dp_delay[node] = delays[node] + max(results)
    return dp_delay[node]

t = int(ssr())
for _ in range(t):
    n, k = map(int, ssr().split())
    delays = [0] + list(map(int, ssr().split()))
    dp_delay = delays[:] # deepcopy
    build = [[] for _ in range(n+1)]
    for _ in range(k):
        x, y = map(int, ssr().split())
        build[y].append(x)
        if dp_delay[y] != -1:
            dp_delay[y] = -1
    tar = int(ssr())
    ans = f(tar)
    print(ans)

 

간만에 돌아온 백준 풀이 입니다. 골드 3이긴 한데 간단한 재귀로 풀리기 때문에 크게 어려운 문제는 아니란 생각이 들구요. 아마도 언어에 따라 재귀로 풀 수 없기 때문에 특정 풀이가 강요되고, 해당 풀이가 난이도가 어려운 풀이가 아닌가 생각합니다. 그것도 따로 공부를 해서 차차 추가해보도록 하겠습니다.

 

추가// 딱히 새로운 풀이라고 할만한게 없네요. 그냥 다들 dp를 사용한 것 같습니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]17144 풀이  (0) 2023.11.02
[BOJ][Python]17070 풀이  (0) 2023.10.30
[BOJ][Python]15686 풀이  (0) 2023.10.27
[BOJ][Python]14938 풀이  (0) 2023.10.22