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))'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| BOJ 11047๋ฒ : ๋์ 0 (Python/Silver 4) (0) | 2023.02.19 |
|---|---|
| BOJ 1026๋ฒ : ๋ณด๋ฌผ (Python/Silver 4) (0) | 2023.02.19 |
| BOJ 2512๋ฒ : ์์ฐ (Python/Silver 3) (0) | 2023.02.18 |
| BOJ 2581๋ฒ : ์์ (Python/Silver 5) (0) | 2023.02.09 |
| BOJ 2869๋ฒ : ๋ฌํฝ์ด๋ ์ฌ๋ผ๊ฐ๊ณ ์ถ๋ค (Python/Silver 5) (0) | 2022.11.02 |