ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 1068 ํŠธ๋ฆฌ with Python
    PS 2022. 7. 7. 22:19
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 1068 ํŠธ๋ฆฌ

    ๐Ÿ’ก ์กฐ๊ฑด

    1. ํŠธ๋ฆฌ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ๋ž€, ์ž์‹์˜ ๊ฐœ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋ฅผ ๋งํ•œ๋‹ค.
    1. ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋…ธ๋“œ ํ•˜๋‚˜๋ฅผ ์ง€์šธ ๊ฒƒ์ด๋‹ค. ๊ทธ ๋•Œ, ๋‚จ์€ ํŠธ๋ฆฌ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.
      ๋…ธ๋“œ๋ฅผ ์ง€์šฐ๋ฉด ๊ทธ ๋…ธ๋“œ์™€ ๋…ธ๋“œ์˜ ๋ชจ๋“  ์ž์†์ด ํŠธ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.
    1. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.
    1. ํ˜„์žฌ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” 3๊ฐœ์ด๋‹ค. (์ดˆ๋ก์ƒ‰ ์ƒ‰์น ๋œ ๋…ธ๋“œ) ์ด๋•Œ, 1๋ฒˆ์„ ์ง€์šฐ๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ•œ๋‹ค.
      ๊ฒ€์ •์ƒ‰์œผ๋กœ ์ƒ‰์น ๋œ ๋…ธ๋“œ๊ฐ€ ํŠธ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ ๋…ธ๋“œ์ด๋‹ค.
      ์ด์ œ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” 1๊ฐœ์ด๋‹ค.
    1. ์ฒซ์งธ ์ค„์— ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.
      ๋‘˜์งธ ์ค„์—๋Š” 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ N-1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
      ๋งŒ์•ฝ ๋ถ€๋ชจ๊ฐ€ ์—†๋‹ค๋ฉด (๋ฃจํŠธ) -1์ด ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„์—๋Š” ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
    1. BFS, ๊ทธ๋ž˜ํ”„ํƒ์ƒ‰ ์œ ํ˜•์˜ ๋ฌธ์ œ

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

    import sys
    n = int(sys.stdin.readline())
    stack = list(map(int, sys.stdin.readline().split()))
    edge = [[-1] for _ in range(n)]
    
    k = int(sys.stdin.readline())
    root = []
    
    for i in range(n):
        if stack[i] >= 0 and i != k:
            edge[stack[i]].append(i)
        elif stack[i] == -1 and i != k:
            root.append(i)
    
    edge[k] = [-1]
    ans = 0
    
    visited = [0]*n
    
    while root:
        n = root.pop()
    
        if visited[n] == 0:
            visited[n] = 1
            if len(edge[n]) == 1:
                ans += 1
    
            else:
                sub = edge[n]
                sub.pop(0)
    
                for i in sub:
                    root.append(i)
    
    print(ans)

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

    ์˜ˆ์ œ

    5
    -1 0 0 1 1
    2

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

    2

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

    1. n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ edge ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด -1 ๋กœ ์ดˆ๊ธฐํ™”ํ•ด ๋ถ€๋ชจ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ์ƒํƒœ๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
    1. 0๋ถ€ํ„ฐ n๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉด์„œ(i), 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ N-1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์˜ ๊ฐ’์ด 0๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฌ๊ณ , ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ์™€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด
      ๊ทธ๋ž˜ํ”„์— i๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
    1. ๋งŒ์•ฝ (2)๋ฒˆ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด root ๋ฆฌ์ŠคํŠธ์— i๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
      ๊ทธ ํ›„, edge[k]๋ฅผ -1 ๋กœ ๋ณ€๊ฒฝํ•ด ์‚ญ์ œ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
    1. root ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ while ๋ฌธ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    1. root ์—์„œ pop() ํ•œ ๋…ธ๋“œ๋ฒˆํ˜ธ๋ฅผ ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋‹ค๋ฉด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ณ , edge[n]์˜ ๊ธธ์ด๊ฐ€ 1์ผ ๊ฒฝ์šฐ ans += 1 ํ•ด์ค€๋‹ค.
    1. (5)๋ฒˆ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด sub = edge[n]์ด๋ฉฐ, sub์˜ ๊ฐ€์žฅ ์™ผ์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ pop ํ•œ ๋’ค, sub ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ root์— i ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.