Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- HTTP
- 그래프
- 분할 정복
- Spring
- 도커
- 브루트포스
- 이분탐색
- SQL
- 다이나믹프로그래밍
- 순열
- 역방향 반복자
- 그리드 알고리즘
- GIT
- TCP
- AWS
- 재귀
- 자바
- 트리
- BFS
- CI/CD
- 다이나믹 프로그래밍
- 백준
- 컴퓨터 네트워크
- github action
- dfs
- 자료구조
- 스프링
- 분할정복
- 알고리즘
- 그리드
Archives
- Today
- Total
코딩성장스토리
백준 2606번: 바이러스 본문
https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
이 문제는 BFS,DFS 또는 유니온 파인드로 풀 수있다. 그래서 두 가지 풀이로 풀것이다 BFS와 유니온파인드이다.
유니온 파인드로 풀 수있는 이유는 바이러스 감염여부이고 이 그래프가 어떤 노드가 어떤 노드를 연결하고 있고는 중요하지 않고 같은 그래프인지 아닌지만 파악하면 되기 때문이다. 그래서 유니온 파인드로 풀어봤다.
그냥 간단하게 연결 된 쌍을 다 유니온 파인드 해버리면 결국 쌍이 이루어지는것들은 같은 루트노드를 가리키게 된다. 즉 같은 그래프 라는 것이다 . 코드를 보자
유니온 파인드 코드
#include <iostream>
#include <vector>
using namespace std;
int parent[101];
int find(int x){ //유니온 파인드
if (x==parent[x]){
return x;
}
else{
int y = find(parent[x]);
parent[x] = y;
return y;
}
}
void Union(int x,int y){
x = find(x);
y = find(y);
parent[y] = x;
}
int main(){
int n,m;
int ans=0;
cin >>n>>m;
for(int i=1;i<=n;i++){
parent[i]=i;
}
while(m--){ //쌍을 이루는 것들을 같은 그래프로
int x,y;
cin>>x>>y;
Union(x,y);
}
for(int i=2;i<=n;i++){ //1과 같은그래프면 값추가
if(find(1)==find(i)){
ans++;
}
}
cout<<ans;
}
BFS 코드
메모리를 조금이라도 아끼려고 vector 값 사용
#include <iostream>
#include <vector>
using namespace std;
bool check[101];
int ans;
void dfs(vector<vector<int>>& v,int x){ //dfs 벡터
ans++;
check[x]=true;
int len=v[x].size();
for(int i=0;i<len;i++){
if(check[v[x][i]]==false){
dfs(v,v[x][i]);
}
}
}
int main(){
int n,m;
cin >> n>>m;
vector<vector<int>> v(n+1);
while(m--){
int x,y;
cin >> x>>y;
v[x].push_back(y); //양방향 그래프이기 때문에 둘다 들어가기
v[y].push_back(x);
}
dfs(v,1);
cout <<ans-1;
}
'백준 코딩' 카테고리의 다른 글
백준 1654번:랜선 자르기 (0) | 2022.01.20 |
---|---|
백준 1717번:집합의 표현 (0) | 2022.01.19 |
백준 3015번 :오아시스 재결합 (0) | 2022.01.17 |
백준 9935번: 문자열 폭발 (0) | 2022.01.16 |
백준 1722번:순열의 순서 (0) | 2022.01.15 |