Skip to content

Commit 4d9634c

Browse files
authored
[20250327] BOJ / G2 / 친구 네트워크 / 신동윤
1 parent 29e8583 commit 4d9634c

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
7+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
static int F, cnt;
9+
static Map<String, Integer> map;
10+
static int[] parents, friends;
11+
12+
public static void main(String[] args) throws IOException {
13+
int T = Integer.parseInt(br.readLine());
14+
for (int tc = 1; tc <= T; tc++) {
15+
16+
F = Integer.parseInt(br.readLine());
17+
map = new HashMap<>();
18+
cnt = 0;
19+
20+
makeSet();
21+
init();
22+
23+
for (int i = 0 ; i < F; i++) {
24+
StringTokenizer st = new StringTokenizer(br.readLine());
25+
String name1 = st.nextToken();
26+
String name2 = st.nextToken();
27+
addName(name1); // 이름 관리
28+
addName(name2);
29+
union(map.get(name1), map.get(name2));
30+
// 두 사람의 친구 네트워크에 몇 명이 있는지 구한다.
31+
int root = find(map.get(name1));
32+
System.out.println(friends[root]);
33+
}
34+
}
35+
br.close();
36+
}
37+
38+
static void addName(String name) {
39+
if (map.containsKey(name)) return;
40+
map.put(name, cnt++);
41+
}
42+
43+
static void init() {
44+
// friends[i] = i가 집합의 대표자일 때, 해당 집합에 속하는 친구들의 수
45+
friends = new int[F*2];
46+
for (int i = 0; i < F*2; i++) {
47+
friends[i] = 1; // 초기에는 자기 자신만 친구...
48+
}
49+
}
50+
51+
static void makeSet() {
52+
parents = new int[F * 2]; // F개 관계 -> 최대 F*2명의 사람 존재 가능
53+
for (int i = 0; i < F * 2; i++) {
54+
parents[i] = i;
55+
}
56+
}
57+
58+
static int find(int a) {
59+
if (a == parents[a]) return a;
60+
return parents[a] = find(parents[a]);
61+
}
62+
63+
static boolean union(int a, int b) {
64+
int aRoot = find(a);
65+
int bRoot = find(b);
66+
if (aRoot == bRoot) return false;
67+
if (aRoot < bRoot) {
68+
parents[bRoot] = aRoot;
69+
friends[aRoot] += friends[bRoot]; // 친구 수 합치깅
70+
} else {
71+
parents[aRoot] = bRoot;
72+
friends[bRoot] += friends[aRoot]; // 친구 수 합치깅
73+
}
74+
return true;
75+
}
76+
77+
78+
}
79+
80+
```

0 commit comments

Comments
 (0)