반응형
250x250
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
- computergraphics
- 프래그먼트
- 카이스트
- 자바스크립트
- 우선순위큐
- html
- BFS
- 백준
- 카이스트맛집
- 컴퓨터그래픽스
- 궁동
- 분리집합
- 위상정렬
- 타입스크립트
- 대전맛집
- DP
- 몰입캠프후기
- 프로그래머스
- 앱개발
- 어은동맛집
- 몰입캠프
- 알고리즘
- 후기
- MySQL
- 안드로이드스튜디오
- glfw
- 리사이클러뷰
- nodeJS
- 자바
- node.js
Archives
- Today
- Total
소근소근
[백준 BOJ 4195 glod2 - 친구 네트워크] 해시, 분리집합(disjoint set / union find) C++ 본문
Algorithm
[백준 BOJ 4195 glod2 - 친구 네트워크] 해시, 분리집합(disjoint set / union find) C++
JJureng 2022. 1. 5. 16:40728x90
반응형
SMALL
백준 4195 친구 네트워크
https://www.acmicpc.net/problem/4195
친구 관계 정보를 받아 친구 네트워크에 속하는 친구 수를 출력하는 문제로, 분리 집합(disjoint set)을 이용하여 풀었다.
숫자가 아니라 문자열을 입력 받으므로 자료구조 map을 이용하여 <문자열, 정수> 로 저장하여 정수로 처리했다.
union find 설명 글
https://steptoprogrammer.tistory.com/64
int N, T;
int parent[200001];
int set_size[200001];
int Find(int x) {
if (x == parent[x]) return x;
return parent[x] = Find(parent[x]);
}
void Union(int x, int y) {
int px = Find(x);
int py = Find(y);
if (px != py) {
parent[px] = py;
set_size[py] += set_size[px];
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> T;
string s,a;
for (int i = 0; i < T; i++) {
cin >> N;
int cnt = 0;
map <string, int> pair;
/*for (int i = 1; i <= 200001; i++) {
parent[i] = i;
set_size[i] = 1;
}*/
for (int j = 0; j < N; j++) {
cin >> s >> a;
if (pair.find(s) == pair.end()) {
pair[s] = ++cnt;
parent[cnt] = cnt;
set_size[cnt] = 1;
}
if (pair.find(a) == pair.end()) {
pair[a] = ++cnt;
parent[cnt] = cnt;
set_size[cnt] = 1;
}
int hs = pair[s];
int ha = pair[a];
Union(hs, ha);
int net = set_size[Find(hs)];
cout << net << "\n";
}
}
}
map에 없는 문자열일 경우 문자열을 key로 하여 정수 value값을 지정한다.
정수 값으로 union 과 find 연산을 한다.
처음에 주석친 코드로 각 케이스를 돌 때마다 parent, set_size 배열을 초기화 했더니 출력 초과가 났다.
pair에 추가 할 때 해당 부분만 초기화 하는 코드로 바꾸니까 출력 초과가 나지 않았다..
(시간초과가 아니라 왜 출력초과가 난건지는 모르겠다..)
728x90
반응형
LIST
'Algorithm' 카테고리의 다른 글
[프로그래머스 - 타겟 넘버] BFS C++ (0) | 2022.01.08 |
---|---|
[프로그래머스 - 베스트앨범] 해시 C++ (0) | 2022.01.06 |
[알고리즘/자료구조] 분리 집합( Disjoint Set (a.k.a Union & Find) ) 코드 구현 C++ , 집합 크기 구하기 (0) | 2022.01.05 |
[백준 BOJ 13711 glod1 - LCS4] Longest Common String (LCS) C++ (0) | 2022.01.04 |
C++ upper_bound , lower_bound 이용하기 / 알고리즘 (0) | 2022.01.04 |