๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2606_๋ฐ”์ด๋Ÿฌ์Šค

๋ฟŒ์•ผ._. 2022. 1. 7. 14:25

Silver III

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/2606)

<๋ฐ”์ด๋Ÿฌ์Šค>

๋ฌธ์ œ 

 

์‹ ์ข… ๋ฐ”์ด๋Ÿฌ์Šค์ธ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „ํŒŒ๋œ๋‹ค. ํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๋ฉด ๊ทธ ์ปดํ“จํ„ฐ์™€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์ปดํ“จํ„ฐ๋Š” ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด 7๋Œ€์˜ ์ปดํ“จํ„ฐ๊ฐ€ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. 1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๋ฉด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค๋Š” 2๋ฒˆ๊ณผ 5๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ๊ฑฐ์ณ 3๋ฒˆ๊ณผ 6๋ฒˆ ์ปดํ“จํ„ฐ๊นŒ์ง€ ์ „ํŒŒ๋˜์–ด 2, 3, 5, 6 ๋„ค ๋Œ€์˜ ์ปดํ“จํ„ฐ๋Š” ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ 4๋ฒˆ๊ณผ 7๋ฒˆ ์ปดํ“จํ„ฐ๋Š” 1๋ฒˆ ์ปดํ“จํ„ฐ์™€ ๋„คํŠธ์›Œํฌ์ƒ์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
์–ด๋Š ๋‚  1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ ธ๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜์™€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•ด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์—๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋Š” 100 ์ดํ•˜์ด๊ณ  ๊ฐ ์ปดํ“จํ„ฐ์—๋Š” 1๋ฒˆ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ ์Œ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด์–ด์„œ ๊ทธ ์ˆ˜๋งŒํผ ํ•œ ์ค„์— ํ•œ ์Œ์”ฉ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฒˆํ˜ธ ์Œ์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ 

 

1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ ธ์„ ๋•Œ, 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•ด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋ฅผ ์ฒซ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

- my solution

import sys

def bfs(graph, start): #๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰
    visited=[]
    temp=[start]

    while temp:
        a=temp.pop(0)
        if a not in visited: # ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
            visited.append(a)
            temp+=graph.get(a)
    return visited

if __name__=='__main__':
    num=int(input())
    pair=int(input())

    graph={}
    for i in range(num): #init
        graph[i+1]=[]

    for i in range(pair): # graph ์—ฐ๊ฒฐ
        a,b=map(int ,sys.stdin.readline().split())
        graph[a].append(b)
        graph[b].append(a)

    print(len(bfs(graph,1))-1) # 1๋ฒˆ ์ปดํ“จํ„ฐ๋Š” ์ œ์™ธ

 

  • bfs
    - visited list ์„ ์–ธ, temp list์— ์‹œ์ž‘ํ•  ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ ๋„ฃ์–ด์„œ ์„ ์–ธ
    - temp list๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต: temp์—์„œ ๋งจ ์•ž ๊ฐ’์„ ๋ฝ‘์•„์™€ ์•„์ง ๋ฐฉ๋ฌธํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด visited์— ์ถ”๊ฐ€ํ•˜๊ณ  temp list์— ๊ทธ ์ปดํ“จํ„ฐ์™€ ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ ๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€
  • main
    - ์ปดํ“จํ„ฐ ์ˆ˜, ๊ฐ„์„  ์ˆ˜ ์ž…๋ ฅ
    - ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋œ ์ •์ ์„ dict๋กœ ํ‘œํ˜„ -> key ๊ฐ’๋“ค ์„ ์–ธ
    - ์–‘๋ฐฉํ–ฅ ๊ฐ„์„  ์ด๋ฏ€๋กœ ์–‘์ชฝ key์— value ์ถ”๊ฐ€
    - ์ถœ๋ ฅ: bfs์˜ ๋ฐ˜ํ™˜ ๊ฐ’์˜ ๊ธธ์ด - 1(1๋ฒˆ ์ปดํ“จํ„ฐ ์ œ์™ธ)

์ƒ๊ฐ๐Ÿค”

 

์ด ๋ฌธ์ œ๋Š” bfs๋กœ ํ’€๊ฑฐ๋‚˜ dfs๋กœ ํ’€์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์–ด์ œ bfs์™€ dfs ๊ฐœ๋… ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋‚˜๋‹ˆ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทผ๋ฐ... ๋งž๊ฒŒ ํ’€๊ณ  ์žˆ๋Š”๊ฑด๊ฐ€?