ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 1005 ACM Craft with Python
    PS 2022. 7. 17. 22:33
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 1005 ACM Craft

    ๐Ÿ’ก ์กฐ๊ฑด

    1. ์„œ๊ธฐ 2012๋…„! ๋“œ๋””์–ด 2๋…„๊ฐ„ ์ˆ˜๋งŽ์€ ๊ตญ๋ฏผ๋“ค์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ ๊ฒŒ์ž„ ACM Craft (Association of Construction Manager Craft)๊ฐ€ ๋ฐœ๋งค๋˜์—ˆ๋‹ค.
    1. ์ด ๊ฒŒ์ž„์€ ์ง€๊ธˆ๊นŒ์ง€ ๋‚˜์˜จ ๊ฒŒ์ž„๋“ค๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ACMํฌ๋ž˜ํ”„ํŠธ๋Š” ๋‹ค์ด๋‚˜๋ฏนํ•œ ๊ฒŒ์ž„ ์ง„ํ–‰์„ ์œ„ํ•ด ๊ฑด๋ฌผ์„ ์ง“๋Š” ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋‹ค.
      ์ฆ‰, ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์ž„๊ณผ ๋‘ ๋ฒˆ์งธ ๊ฒŒ์ž„์ด ๊ฑด๋ฌผ์„ ์ง“๋Š” ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค.
      ๋งค ๊ฒŒ์ž„์‹œ์ž‘ ์‹œ ๊ฑด๋ฌผ์„ ์ง“๋Š” ์ˆœ์„œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๊ฑด๋ฌผ์€ ๊ฐ๊ฐ ๊ฑด์„ค์„ ์‹œ์ž‘ํ•˜์—ฌ ์™„์„ฑ์ด ๋  ๋•Œ๊นŒ์ง€ Delay๊ฐ€ ์กด์žฌํ•œ๋‹ค.

    1. ํ”„๋กœ๊ฒŒ์ด๋จธ ์ตœ๋ฐฑ์ค€์€ ์• ์ธ๊ณผ์˜ ๋ฐ์ดํŠธ ๋น„์šฉ์„ ๋งˆ๋ จํ•˜๊ธฐ ์œ„ํ•ด ์„œ๊ฐ•๋Œ€ํ•™๊ต๋ฐฐ ACMํฌ๋ž˜ํ”„ํŠธ ๋Œ€ํšŒ์— ์ฐธ๊ฐ€ํ–ˆ๋‹ค!
      ์ตœ๋ฐฑ์ค€์€ ํ™”๋ คํ•œ ์ปจํŠธ๋กค ์‹ค๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฒฝ๊ธฐ์—์„œ ํŠน์ • ๊ฑด๋ฌผ๋งŒ ์ง“๋Š”๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ๊ฒŒ์ž„์—์„œ ์ด๊ธธ ์ˆ˜ ์žˆ๋‹ค.
    1. ๋งค ๊ฒŒ์ž„๋งˆ๋‹ค ํŠน์ •๊ฑด๋ฌผ์„ ์ง“๊ธฐ ์œ„ํ•œ ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ์ตœ๋ฐฑ์ค€์€ ์ขŒ์ ˆํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.
      ๋ฐฑ์ค€์ด๋ฅผ ์œ„ํ•ด ํŠน์ •๊ฑด๋ฌผ์„ ๊ฐ€์žฅ ๋นจ๋ฆฌ ์ง€์„ ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์ตœ์†Œ์‹œ๊ฐ„์„ ์•Œ์•„๋‚ด๋Š” ๋ฌธ์ œ.
    1. ์ฒซ์งธ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
      ์ฒซ์งธ ์ค„์— ๊ฑด๋ฌผ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฑด๋ฌผ๊ฐ„์˜ ๊ฑด์„ค์ˆœ์„œ ๊ทœ์น™์˜ ์ด ๊ฐœ์ˆ˜ K์ด ์ฃผ์–ด์ง„๋‹ค. (๊ฑด๋ฌผ์˜ ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ์กด์žฌํ•œ๋‹ค)
    1. ๋‘˜์งธ ์ค„์—๋Š” ๊ฐ ๊ฑด๋ฌผ๋‹น ๊ฑด์„ค์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ D1, D2, ..., DN์ด ๊ณต๋ฐฑ์„ ์‚ฌ์ด๋กœ ์ฃผ์–ด์ง„๋‹ค.
      ์…‹์งธ ์ค„๋ถ€ํ„ฐ K+2์ค„๊นŒ์ง€ ๊ฑด์„ค์ˆœ์„œ X Y๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (์ด๋Š” ๊ฑด๋ฌผ X๋ฅผ ์ง€์€ ๋‹ค์Œ์— ๊ฑด๋ฌผ Y๋ฅผ ์ง“๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค)
      ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” ๋ฐฑ์ค€์ด๊ฐ€ ์Šน๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฑด์„คํ•ด์•ผ ํ•  ๊ฑด๋ฌผ์˜ ๋ฒˆํ˜ธ W๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
    1. 2 ≤ N ≤ 1000
      1 ≤ K ≤ 100,000
      1 ≤ X, Y, W ≤ N
      0 ≤ Di ≤ 100,000, Di๋Š” ์ •์ˆ˜
    1. BFS, ๊ทธ๋ž˜ํ”„ํƒ์ƒ‰ ์œ ํ˜•์˜ ๋ฌธ์ œ

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from collections import deque
    from sys import stdin
    
    
    def topology_sort(w):
        q = deque()
        dp = [0 for _ in range(n + 1)]
        for i in range(1, n + 1):
            if indegree[i] == 0:
                q.append(i)
                dp[i] = arr[i]
    
        while q:
            now = q.popleft()
    
            for node in graph[now]:
                indegree[node] -= 1
                dp[node] = max(dp[now] + arr[node], dp[node])
                if indegree[node] == 0:
                    q.append(node)
    
        return dp[w]
    
    
    for tc in range(int(stdin.readline())):
        n, m = map(int, stdin.readline().split())
        indegree = [0] * (n + 1)
        graph = [[] for _ in range(n + 1)]
        arr = [0] + list(map(int, stdin.readline().split()))
        for _ in range(m):
            a, b = map(int, stdin.readline().split())
            graph[a].append(b)
            indegree[b] += 1
    
        w = int(stdin.readline())
        print(topology_sort(w))

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    2
    4 4
    10 1 100 10
    1 2
    1 3
    2 4
    3 4
    4
    8 8
    10 20 1 5 8 7 1 43
    1 2
    1 3
    2 4
    2 5
    3 6
    5 7
    6 7
    7 8
    7

    ์‹คํ–‰๊ฒฐ๊ณผ

    120
    39

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ๋ฌธ์ œ๋ฅผ ์š”์•ฝํ•ด๋ณด์ž๋ฉด, ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
      • ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ๊ฑด๋ฌผ์„ ์ง€์„ ์ˆ˜ ์žˆ๋Š” ์ˆœ์„œ๋Š” ๋‹ค๋ฅด๋‹ค.
      • ๋ฐฑ์ค€์ด๊ฐ€ ์ด๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠน์ • ๊ฑด๋ฌผ์„ ์ง€์–ด์•ผ ์Šน๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ํŠน์ • ๊ฑด๋ฌผ์„ ์ง“๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ ํ–‰๋˜๋Š” ๊ฑด๋ฌผ์„ ์ง€์„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
    1. ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ฉด ์šฐ๋ฆฌ๋Š” ๊ฑด์„ค์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ฑด๋ฌผ์„ ์ฐจ๋ก€๋กœ ๊ฑด์„คํ•˜๋ฉด์„œ, W๋ฒˆ ๊ฑด๋ฌผ์„ ์ง€์„ ๋•Œ๊นŒ์ง€์˜ ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ตฌํ•ด์•ผํ•œ๋‹ค.
      ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์œ„์ƒ์ •๋ ฌ์ธ๋ฐ, ์œ„์ƒ์ •๋ ฌ์˜ ๊ฐœ๋…๊ณ  ์œ„์— ์จ๋†“์€ ๊ฒƒ๊ณผ ๊ฐœ๋…์ด ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.
      ์œ„์ƒ์ •๋ ฌ์ด๋ž€, ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋Š” ์ž‘์—…์„ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•ด์•ผํ•  ๋•Œ ๊ทธ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
    1. ๊ฑด๋ฌผ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฑด๋ฌผ๊ฐ„์˜ ๊ฑด์„ค์ˆœ์„œ ๊ทœ์น™์˜ ์ด ๊ฐœ์ˆ˜ K ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„, ์œ„์ƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํ•„์š”ํ•œ indegree ๋ฆฌ์ŠคํŠธ๋ฅผ n + 1 ๊ฐœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
      ๋˜ํ•œ N + 1๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ๊ทธ๋ž˜ํ”„๋„ ์ƒ์„ฑํ•œ๋‹ค.
      ๊ฐ ๊ฑด๋ฌผ์„ ๊ฑด์„คํ•˜๋Š”๋ฐ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์„ ์ž…๋ ฅ๋ฐ›์€ ํ›„, ๊ฑด์„ค์ˆœ์„œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ทธ๋ž˜ํ”„์— ์ž…๋ ฅํ•œ๋‹ค.
      ๋งŒ์•ฝ a, b๋ฅผ ์ž…๋ ฅ ๋ฐ›์•˜๋‹ค๋ฉด, graph[a].append(b) ์ด๋ฉฐ indegree[b] += 1 ์ด๋‹ค.
      b ๊ฑด๋ฌผ์„ ๊ฑด์„คํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” a ๊ฑด๋ฌผ์„ ๊ฑด์„คํ•ด์•ผํ•œ๋‹ค๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— +1 ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
    1. ์ดํ›„, W ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์œ„์ƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋กœ์ง์ด ์žˆ๋Š” topology_sort() ํ•จ์ˆ˜์— W๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.
      ์œ„์ƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š”, indegree ๋ฆฌ์ŠคํŠธ์—์„œ์˜ ๊ฐ’์ด 0์ธ ๊ฒƒ์„ q์— ๋จผ์ € ๋„ฃ๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
      indegree ๋ฆฌ์ŠคํŠธ์—์„œ์˜ ๊ฐ’์€ ํ•ด๋‹น ๊ฑด๋ฌผ์ด ์ง€์–ด์ง€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์ง€์–ด์ ธ์•ผํ•  ๊ฑด๋ฌผ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    1. ์œ„์ƒ์ •๋ ฌ ํ•จ์ˆ˜์—์„œ๋Š” DP ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๊ฑด๋ฌผ์„ ์ง€์—ˆ์„ ๋•Œ์˜ ์†Œ์š”์‹œ๊ฐ„์„ ์ฒดํฌํ•œ๋‹ค.
      ํ์—์„œ ๋บ€ ๊ฑด๋ฌผ ๋ฒˆํ˜ธ(now) ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๋”ฐ๋ผ ์ˆœํšŒํ•˜๋ฉด์„œ, ์ˆœํšŒํ•˜๋Š” ๊ฑด๋ฌผ์˜ ๋ฒˆํ˜ธ(node)์— ํ•ด๋‹นํ•˜๋Š” indegree์˜ ๊ฐ’์„ 1์”ฉ ๋นผ์ค€๋‹ค.
      ๊ทธ๋ฆฌ๊ณ  DP[node] ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ DP[now] + ๊ฑด์„ค์— ํ•„์š”ํ•œ ์‹œ๊ฐ„[node] ๊ฐ’๊ณผ ๋น„๊ตํ•ด ๊ฐ€์žฅ ํฐ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
    1. ์ดํ›„, indegree[node] ์˜ ๊ฐ’์ด 0 ์ด๋ผ๋ฉด queue์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฐ˜๋ณตํ•œ๋‹ค.
      queue ๊ฐ€ ๋ชจ๋‘ ๋นŒ ๋•Œ๊นŒ์ง€ ์ˆœํšŒ๋ฅผ ๋งˆ์ณค๋‹ค๋ฉด, DP[W] ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.
      DP[W]์˜ ๊ฐ’์€ W ๋ฒˆ ๊ฑด๋ฌผ์ด ์ง€์–ด์ง€๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค.

    ๐Ÿ’พ ๋ฐฐ์šด์ 

    1. ์œ„์ƒ์ •๋ ฌ์ด๋ž€, ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋Š” ์ž‘์—…์„ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•ด์•ผํ•  ๋•Œ ๊ทธ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜.
      ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ , ์‘์šฉํ•ด์•ผํ• ์ง€ ๋” ์—ฐ์Šต์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ๋ณต์žกํ•ด๋ณด์ด์ง€๋งŒ, ๊ฐœ๋…๊ณผ ํ•„์š”ํ•œ ์ƒํ™ฉ์„ ์ž˜ ์ดํ•ดํ•œ๋‹ค๋ฉด
      ์ถฉ๋ถ„ํžˆ ์ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์ด๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.