
idea : 바이러스 문제랑 유사하게
링크드 리스트처럼 vector에 꼬리꼬리로 입력하기
|
6 5 1 2 2 5 5 1 3 4 4 6
|
이거같은 경우에는

이런 느낌으로 코드를 짜보려고 함
#include <iostream>
#include <vector>
using namespace std;
void dfs(vector<vector<int>>&v, vector<int>&visit, int st){
visit[st] = true;
for(auto x : v[st]){
if(!visit[x]){
visit[x] = true;
dfs(v, visit, x);
}
}
}
int main(){
int N, M, a, b;
cin >> N >> M;
vector<vector<int>> v(N+1);
vector<int> visit(N+1, false);
while(M--){
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
int ans = 0;
for(int i = 1; i<=N; ++i){
if(!visit[i]){
ans++;
dfs(v, visit, i);
}
}
cout << ans;
return 0;
}
한방에 성공!
'C++ 문제풀기 > 백준-프로그래머스' 카테고리의 다른 글
| 백준 | 1463. 1로 만들기 (0) | 2025.10.08 |
|---|---|
| 백준 | 9012 괄호 (0) | 2025.10.08 |
| 프로그래머스 | 숫자의 표현 (0) | 2025.10.04 |
| 프로그래머스 | 피보나치 수 (0) | 2025.10.04 |
| 백준 | 1003. 피보나치 함수 (0) | 2025.09.25 |