ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 10775 ๊ณตํ•ญ with Python
    PS 2021. 10. 13. 23:23
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 10775 ๊ณตํ•ญ

    ๐Ÿ’ก ์กฐ๊ฑด ๋ฐ ํ’€์ด

    1. ๊ณตํ•ญ์—๋Š” G๊ฐœ์˜ ๊ฒŒ์ดํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ฐ๊ฐ์€ 1์—์„œ G๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    2. ๊ณตํ•ญ์—๋Š” P๊ฐœ์˜ ๋น„ํ–‰๊ธฐ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋„์ฐฉํ•  ์˜ˆ์ •.
    3. i๋ฒˆ์งธ ๋น„ํ–‰๊ธฐ๋ฅผ 1๋ฒˆ๋ถ€ํ„ฐ gi (1 โ‰ค gi โ‰ค G) ๋ฒˆ์งธ ๊ฒŒ์ดํŠธ์ค‘ ํ•˜๋‚˜์— ์˜๊ตฌ์ ์œผ๋กœ ๋„ํ‚น
    4. ๋น„ํ–‰๊ธฐ๊ฐ€ ์–ด๋Š ๊ฒŒ์ดํŠธ์—๋„ ๋„ํ‚นํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ณตํ•ญ์ด ํ์‡„๋˜๊ณ , ์ดํ›„ ์–ด๋–ค ๋น„ํ–‰๊ธฐ๋„ ๋„์ฐฉํ•  ์ˆ˜ ์—†๋‹ค.
    5. Union - Find ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•์˜ ๋ฌธ์ œ
    6. ๋น„ํ–‰๊ธฐ๋ฅผ ์ตœ๋Œ€ ๋ช‡ ๋Œ€ ๋„ํ‚น์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.
    7. ๊ฒŒ์ดํŠธ์˜ ์ˆ˜ G (1 โ‰ค G โ‰ค 105)
      ๋น„ํ–‰๊ธฐ์˜ ์ˆ˜ P (1 โ‰ค P โ‰ค 105)
      P๊ฐœ์˜ ์ค„์— gi (1 โ‰ค gi โ‰ค G)

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

    
    from sys import stdin
    
    
    def find_parent(parent, x):
        if parent[x] != x:
            parent[x] = find_parent(parent, parent[x])
        return parent[x]
    
    
    def union_parent(parent, a, b):
        a = find_parent(parent,a)
        b = find_parent(parent,b)
    
        if a >b:
            parent[a] = b
        else:
            parent[b] = a
    
    
    g = int(stdin.readline())
    p = int(stdin.readline())
    
    parent = [x for x in range(g + 1)]
    res = 0
    
    for i in range(p):
        gi = int(stdin.readline())
    
        data = find_parent(parent, gi)
        if data == 0:
            break
        res += 1
        union_parent(parent, data, data - 1)
    
    print(res)
    

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

    ์˜ˆ์ œ

    
    4
    3
    4
    1
    1
    

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

    
    2
    

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

    1. ๊ฐ ๋น„ํ–‰๊ธฐ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ ๋ฐ›์„ ๋•Œ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒŒ์ดํŠธ ์ˆ˜ + 1 ๋งŒํผ ๋ฐฐ์—ด parent ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

    2. ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ’์€ ๊ฐ ์ธ๋ฑ์Šค ๊ฐ’๊ณผ ๋™์ผํ•˜๊ฒŒ ํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์„ ๋ถ€๋ชจ๋ฅผ ์ž์‹ ์œผ๋กœ ๋‘” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹๋‹ค.

    3. ๋น„ํ–‰๊ธฐ์˜ ๋ฒˆํ˜ธ gi ๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„ gi์˜ ๋ถ€๋ชจ๋ฅผ ์ฐพ๋Š”๋‹ค.

      
      data = find_parent(parent, gi)
      
    4. ๋งŒ์•ฝ data ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” 0๋ฒˆ ๊ฒŒ์ดํŠธ์— ๋„ํ‚น์„ ํ•ด์•ผํ•  ๊ฒฝ์šฐ ๋ฐ˜๋ณต๋ฌธ์„ ์ค‘๋‹จํ•œ๋‹ค.

    5. 4๋ฒˆ ์ด ์•„๋‹ˆ๋ผ๋ฉด res += 1.

    6. gi ๋ฒˆ ๋น„ํ–‰๊ธฐ๊ฐ€ data ๋ฒˆ ๊ฒŒ์ดํŠธ์— ๋„ํ‚น์„ ํ–ˆ๊ณ , ๊ทธ ๊ฒŒ์ดํŠธ์—๋Š” ๋‹ค๋ฅธ ๋น„ํ–‰๊ธฐ๊ฐ€ ๋„ํ‚น ํ•  ์ˆ˜ ์—†์œผ๋‹ˆ
      data - 1 ๋ฒˆํ˜ธ์˜ ๊ฒŒ์ดํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒŒ์ดํŠธ๊ฐ€ ๋๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ž.

      
      union_parent(parent, data, data - 1)
      
    7. ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด์˜ค๋Š” ๋น„ํ–‰๊ธฐ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋‹ค, 4๋ฒˆ ์˜ ์กฐ๊ฑด์— ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋ณต๋ฌธ์„ ์ค‘๋‹จํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

    ๐Ÿ’พ ๋Š๋‚€์ 

    • ๋‚ด๊ฐ€ ์ข‹์•„ํ•˜๋Š” Union-Find ๋ฌธ์ œ์ด๋‹ค.
    • ์ฒ˜์Œ ํ’€์–ด๋ณด๋Š” ์œ ํ˜•์ด๋ผ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆฌ๊ธด ํ–ˆ์ง€๋งŒ, ๊ฒŒ์ดํŠธ์™€ ๋น„ํ–‰๊ธฐ์˜ ๊ด€๊ณ„๋ฅผ ์กฐ๊ธˆ ํŒŒ์•…ํ•˜๋‹ˆ
      ์†Œ์Šค์ฝ”๋“œ๋ผ๋„ ์งœ๋ฉด์„œ ์‹œ๋„ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    • ์œ ํŒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋Š” find_parent, union_parent ์˜ ๋กœ์ง์„ ์™ธ์›Œ๋‘๋‹ˆ ํ›จ~์”ฌ ์ˆ˜์›”ํ–ˆ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.