ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 2637 ์žฅ๋‚œ๊ฐ ์กฐ๋ฆฝ with Python
    PS 2022. 6. 1. 00:37
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 2637 ์žฅ๋‚œ๊ฐ ์กฐ๋ฆฝ

    ๐Ÿ’ก ์กฐ๊ฑด

    1. ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ์žฅ๋‚œ๊ฐ์„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ถ€ํ’ˆ์œผ๋กœ ์กฐ๋ฆฝํ•˜์—ฌ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.
      ์ด ์žฅ๋‚œ๊ฐ์„ ๋งŒ๋“œ๋Š”๋ฐ๋Š” ๊ธฐ๋ณธ ๋ถ€ํ’ˆ๊ณผ ๊ทธ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์œผ๋กœ ์กฐ๋ฆฝํ•˜์—ฌ ๋งŒ๋“  ์ค‘๊ฐ„ ๋ถ€ํ’ˆ์ด ์‚ฌ์šฉ๋œ๋‹ค.
    1. ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์€ ๋‹ค๋ฅธ ๋ถ€ํ’ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๋ฆฝ๋  ์ˆ˜ ์—†๋Š” ๋ถ€ํ’ˆ์ด๋‹ค. ์ค‘๊ฐ„ ๋ถ€ํ’ˆ์€ ๋˜ ๋‹ค๋ฅธ ์ค‘๊ฐ„ ๋ถ€ํ’ˆ์ด๋‚˜ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ถ€ํ’ˆ์ด๋‹ค.
    1. ์–ด๋–ค ์žฅ๋‚œ๊ฐ ์™„์ œํ’ˆ๊ณผ ๊ทธ์— ํ•„์š”ํ•œ ๋ถ€ํ’ˆ๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๊ฐ€ ์ฃผ์–ด์ ธ ์žˆ์„ ๋•Œ ํ•˜๋‚˜์˜ ์žฅ๋‚œ๊ฐ ์™„์ œํ’ˆ์„ ์กฐ๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด
      ํ•„์š”ํ•œ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์˜ ์ข…๋ฅ˜๋ณ„ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ.
    1. ์ž์—ฐ์ˆ˜ N(3 โ‰ค N โ‰ค 100), 1๋ถ€ํ„ฐ N-1๊นŒ์ง€๋Š” ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์ด๋‚˜ ์ค‘๊ฐ„ ๋ถ€ํ’ˆ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , N์€ ์™„์ œํ’ˆ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    1. ์ž์—ฐ์ˆ˜ M(3 โ‰ค M โ‰ค 100)์ด ์ฃผ์–ด์ง€๊ณ , ๊ทธ ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ์–ด๋–ค ๋ถ€ํ’ˆ์„ ์™„์„ฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ถ€ํ’ˆ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ 3๊ฐœ์˜ ์ž์—ฐ์ˆ˜ X, Y, K๋กœ ์ฃผ์–ด์ง„๋‹ค.
      "์ค‘๊ฐ„ ๋ถ€ํ’ˆ์ด๋‚˜ ์™„์ œํ’ˆ X๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์ค‘๊ฐ„ ๋ถ€ํ’ˆ ํ˜น์€ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ Y๊ฐ€ K๊ฐœ ํ•„์š”ํ•˜๋‹ค"๋Š” ๋œป
    1. ํ•˜๋‚˜์˜ ์™„์ œํ’ˆ์„ ์กฐ๋ฆฝํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์˜ ์ˆ˜๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜๋˜(์ค‘๊ฐ„ ๋ถ€ํ’ˆ์€ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ)
      ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ๋ถ€ํ„ฐ ํฐ ์ˆœ์„œ๊ฐ€ ๋˜๋„๋ก ํ•œ๋‹ค. ๊ฐ ์ค„์—๋Š” ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์˜ ๋ฒˆํ˜ธ์™€ ์†Œ์š” ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
      ์ •๋‹ต์€ 2,147,483,647 ์ดํ•˜์ด๋‹ค.
    1. ์œ„์ƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•์˜ ๋ฌธ์ œ

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

    import sys
    from collections import deque
    
    input = sys.stdin.readline
    n = int(input())
    
    connect = [[] for _ in range(n + 1)]
    needs = [[0] * (n + 1) for _ in range(n + 1)]
    
    q = deque()
    degree = [0] * (n + 1)
    
    for _ in range(int(input())):
        a, b, c = map(int, input().split())
        connect[b].append((a, c))
        degree[a] += 1
    
    for i in range(1, n + 1):
        if degree[i] == 0:
            q.append(i)
    
    while q:
        now = q.popleft()
    
        for next, next_need in connect[now]:
            if needs[now].count(0) == n + 1:
                needs[next][now] += next_need
            else:
                for i in range(1, n + 1):
                    needs[next][i] += needs[now][i] * next_need
    
            degree[next] -= 1
            if degree[next] == 0:
                q.append(next)
    
    for x in enumerate(needs[n]):
        if x[1] > 0:
            print(*x)

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

    ์˜ˆ์ œ

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

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

    1 16
    2 16
    3 9
    4 17

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

    1. ๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฌธ์žฅ์„ ๋จผ์ € ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

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

    1. ์œ„์ƒ ์ •๋ ฌ์€ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ž‘์—…์„ ์ฐจ๋ก€๋Œ€๋กœ ์ˆ˜ํ–‰ํ•ด์•ผํ•  ๋•Œ ๊ทธ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
      ๊ฐ ์ค‘๊ฐ„ ๋ถ€ํ’ˆ์ด ๋งŒ๋“ค์–ด์ง€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช‡ ๊ฐœ์˜ ๊ธฐ๋ณธ ๋ถ€ํ’ˆ์ด ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์ƒ์ •๋ ฌ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. ํ•„์š”ํ•œ ๊ฐœ์ˆ˜๋ฅผ needs ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•˜๊ณ , needs[n] ์—์„œ ๊ฐ ๋ถ€ํ’ˆ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•  ๊ฒƒ์ด๋‹ค.
    1. connect ๋ฆฌ์ŠคํŠธ์—๋Š” X ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ Y๋ฒˆ ๋ถ€ํ’ˆ K ๊ฐœ์— ๋Œ€ํ•ด ์ €์žฅํ•œ๋‹ค.

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

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

    ๋Œ“๊ธ€

Designed by Tistory.