๊ด€๋ฆฌ ๋ฉ”๋‰ด

Keep Going

[BOJ] 2626 ๋ฐ”์ด๋Ÿฌ์Šค ๋ณธ๋ฌธ

Problem Solving

[BOJ] 2626 ๋ฐ”์ด๋Ÿฌ์Šค

seon 2024. 5. 13.
๋ฐ˜์‘ํ˜•

๐Ÿ’ก๋ฌธ์ œ ๋ถ„์„ ์š”์•ฝ

  • ํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ์— ๊ฑธ๋ฆฌ๋ฉด → ๊ทธ ์ปด๊ณผ ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๋ชจ๋“  ์ปด์ด ์›œ์— ๊ฑธ๋ฆฐ๋‹ค.
  • 1๋ฒˆ ์ปด์„ ํ†ตํ•ด ์›œ์— ๊ฑธ๋ฆฌ๋Š” ์ปดํ“จํ„ฐ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด๋ผ.

์—ฃ์ง€์ผ€์ด์Šค

  • ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ์ผ€์ด์Šค : ์ž…๋ ฅ์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜, 1๊ฐœ์˜ ์š”์†Œ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ
# ์ž…๋ ฅ 
1 
1 
1 1

# ์ถœ๋ ฅ 
0

์ž…์ถœ๋ ฅ

  • ์ž…๋ ฅ
7 # ์ปดํ“จํ„ฐ ์ˆ˜ N
6 # ์ปดํ“จํ„ฐ ์Œ ์ˆ˜ (๊ฐ„์„  ์ˆ˜) M
1 2 # ๊ฐ„์„  ์ˆ˜ ๋งŒํผ ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ์Œ์ด ์ฃผ์–ด์ง„๋‹ค.
2 3
1 5
5 2
5 6
4 7
  • ์ถœ๋ ฅ
4 # 1๋ฒˆ ์ปด์„ ํ†ตํ•ด ์›œ์— ๊ฑธ๋ฆฌ๋Š” ์ปดํ“จํ„ฐ ์ˆ˜

1 ≤ ์ปดํ“จํ„ฐ ์ˆ˜ N ≤ 100

1 ≤ ๊ฐ„์„  ์ˆ˜ M ≤ ์–‘์ˆ˜

์‹œ๊ฐ„์ œํ•œ : 1์ดˆ

๐Ÿ’ก์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ (์ˆ˜๋„ ์ฝ”๋“œ)

  1. ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ
    1. n
    2. m
    3. com = {i:[] for i in range(1,n+1)}
    4. visited = [0]*(n+1)
    5. ๋ฒˆํ˜ธ ์Œ ๋ฐ›์•„์„œ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ
  2. 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ์‹œ์ž‘์œผ๋กœ ํƒ์ƒ‰ ์‹œ์ž‘ํ•ด์„œ ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ
    1. #0. ํ ๋งŒ๋“ค๊ณ  ์ฒดํฌ์ธ
    2. #1. while ํ์—์„œ ํ•˜๋‚˜ ๋ฝ‘๊ธฐ
    3. #2. ๋ชฉ์ ์ง€์ธ๊ฐ€?
    4. #3. ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณณ ์ˆœํšŒ
    5. #4. ๊ฐˆ ์ˆ˜ ์žˆ๋‚˜?
    6. #5. ์ฒดํฌ์ธ
    7. #6. ํ์— ๋„ฃ

๐Ÿ’ก์ฝ”๋“œ

34044 KB 64 ms

import sys
from collections import deque

def bfs(node,com,visited):
    num_com = 0
    #0. ํ ๋งŒ๋“ค๊ณ  ์ฒดํฌ์ธ
    q = deque([node])
    visited[node] = True

    while q:
        #1. ํ์—์„œ ํ•˜๋‚˜ ๋ฝ‘๊ธฐ
        v = q.popleft()

        #2. ๋ชฉ์ ์ง€์ธ๊ฐ€
        
        #3. ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณณ ์ˆœํšŒ
        for item in com[v]:
            #4. ๊ฐˆ ์ˆ˜ ์žˆ๋‚˜?
            if not visited[item]:
                #5. ์ฒดํฌ์ธ
                visited[item] = True
                num_com += 1
                #6. ํ์— ๋„ฃ๊ธฐ
                q.append(item)

    return num_com
def solution():
    n = int(sys.stdin.readline().strip())
    m = int(sys.stdin.readline().strip())
    com = {i:[] for i in range(1,n+1)}
    visited = [False]*(n+1)
    for _ in range(m):
        u,v = map(int, sys.stdin.readline().strip().split())
        com[u].append(v)
        com[v].append(u)
    
    wom_num = bfs(1,com,visited)
    
    return wom_num

if __name__=="__main__":
    print(solution())

๐Ÿ’ก์‹œ๊ฐ„๋ณต์žก๋„

O(N+M)

๐Ÿ’ก ๋А๋‚€์  or ๊ธฐ์–ตํ• ์ •๋ณด

  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ & bfs ๊ตฌํ˜„์‹œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณณ ์ˆœํšŒํ•˜๋Š” ์ฝ”๋“œ
        #3. ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณณ ์ˆœํšŒ
        for item in com[v]:
            #4. ๊ฐˆ ์ˆ˜ ์žˆ๋‚˜?
            if not visited[item]:
                #5. ์ฒดํฌ์ธ
                visited[item] = True
                num_com += 1
                #6. ํ์— ๋„ฃ๊ธฐ
                q.append(item)
๋ฐ˜์‘ํ˜•