๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 2606๋ฒˆ : ๋ฐ”์ด๋Ÿฌ์Šค (C++, Python/Silver 3)

devCloud 2023. 2. 19. 00:16
728x90
 

2606๋ฒˆ: ๋ฐ”์ด๋Ÿฌ์Šค

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

www.acmicpc.net

๋ฌธ์ œ

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

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

์–ด๋А ๋‚  1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ ธ๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜์™€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•ด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

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


์˜ˆ์ œ ์ž…๋ ฅ

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

์˜ˆ์ œ ์ถœ๋ ฅ

4

๋ฌธ์ œ ์„ค๋ช…

1๋ฒˆ ์ปดํ“จํ„ฐ์—์„œ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ๋“ค์ด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ ธ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๊ทธ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

Solution

C++

#include <iostream>
using namespace std;
#define MAX 101

int C, net, cnt = 0; //์ปดํ“จํ„ฐ ๊ฐœ์ˆ˜, ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ ์Œ, ๊ฐ์—ผ๋œ ์ปดํ“จํ„ฐ๋ฅผ ์นด์šดํŠธ
int adj[MAX][MAX]; //์ธ์ ‘ ํ–‰๋ ฌ
bool visited[MAX]; //๋ฐฉ๋ฌธ ํ™•์ธ ์—ฌ๋ถ€

void DFS(int n){
    visited[n] = true; //true = ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ๊ฑธ ํ‘œ์‹œ
    for(int i=1; i <= C; i++){ //๋ฐฉ๋ฌธํ•œ ๊ฒƒ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ง€ ํ™•์ธ
        if(adj[n][i] == 1 && visited[i] == 0){ //์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ๋ฐฉ๋ฌธ์„ ์•„์ง ์•ˆ ํ–ˆ๋‹ค๋ฉด
            cnt++; //๊ฐ์—ผ๋œ ์ปดํ“จํ„ฐ ์นด์šดํŠธ
            DFS(i); //๊ฐ์—ผ๋œ ์ปดํ“จํ„ฐ์™€ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์žฌ๊ท€๋กœ ๋Œ๋ฆฌ๊ธฐ
        }
    }
}
int main() {
    cin >> C >> net;
    for(int i=0; i <net; i++){
        int a, b;
        cin >> a >> b;
        adj[a][b] = 1;
        adj[b][a] = 1;
    }
    DFS(1); //1๋ฒˆ ์ปดํ“จํ„ฐ๋งŒ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ๊ฑธ๋ ธ์œผ๋‹ˆ 1๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
    cout << cnt;

    return 0;
}

Python

from collections import deque

C, N = int(input()), int(input()) #์ปดํ“จํ„ฐ ์ˆ˜, ์ปดํ“จํ„ฐ ์Œ์˜ ์ˆ˜
adj = [[] for _ in range(C + 1)] #์ด์ค‘ ๋ฆฌ์ŠคํŠธ
visited = [False for _ in range(C + 1)] #๋ฐฉ๋ฌธ ํ‘œ์‹œ ํ™•์ธ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ(False๋กœ ์ดˆ๊ธฐํ™”)

for _ in range(N):
    a, b = map(int, input().split())
    adj[a].append(b) #ํ†ฑ๋‹ˆํ˜• ๋ฆฌ์ŠคํŠธ(๊ฐ€๋กœ ํฌ๊ธฐ๊ฐ€ ๋ถˆ๊ทœ์น™), append๋กœ ๋™์  ์ƒ์„ฑ ๊ฐ€๋Šฅ
    adj[b].append(a) #์—ฐ๊ฒฐ ๋ผ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉด์„œ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

def BFS(x):
    deq = deque([x]) #ํ์— 1์ด ๋“ค์–ด๊ฐ
    cnt = 0 #๋ฐ”์ด๋Ÿฌ์Šค ๋จน์€ ์ปดํ“จํ„ฐ ๊ฐœ์ˆ˜
    visited[x] = True #๋ฐฉ๋ฌธ ํ‘œ์‹œ

    while deq:
        n = deq.popleft() #์™ผ์ชฝ์—์„œ ๊ฐ’์„ ๋นผ๋ƒ„
        for i in adj[n]: #n์ด 1์ผ ๋•Œ 1๊ณผ ์—ฐ๊ฒฐ๋œ ๊ฒƒ๋ถ€ํ„ฐ ํ™•์ธ
            if visited[i] == False: #๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
                visited[i] = True #๋ฐฉ๋ฌธ ํ‘œ์‹œํ•˜๊ธฐ
                deq.append(i) #์˜ค๋ฅธ์ชฝ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
                cnt += 1
    return cnt

print(BFS(1))
728x90