골드2 : union find 문제이다. 풀이 으으 너무 아쉽다. 잘해놓고 같은 친구가 들어올 경우에 계산이 중복된다는 것을 체크하지 못했다. 그리고 지나고 보니 코드가 더러워서 다시짰다. Code import sys input = sys.stdin.readline parent = [] def find(x): if parent[x][0] == x: return x else: parent[x][0] = find(parent[x][0]) return parent[x][0] def union(x, y): px, py = find(x), find(y) if px < py: parent[py][0] = px parent[px][1] += parent[py][1] else: parent[px][0] = py parent[py][1] += parent[px][1] T = int(input()) for _ in range(T): f = int(input()) name_dict = dict() num = 0 parent = [] for _ in range(f): a, b = input().split() if a not in name_dict: name_dict[a] = num parent.append([num, 1]) num += 1 if b not in name_dict: name_dict[b] = num parent.append([num, 1]) num += 1 if find(name_dict[a]) != find(name_dict[b]): union(name_dict[a], name_dict[b]) print(parent[find(name_dict[a])][1]) import sys input = sys.stdin.readline parent = dict() network = dict() def find(x): if parent[x] == x: return x else: parent[x] = find(parent[x]) return parent[x] def union(x, y): px, py = find(x), find(y) if px != py: # parent[py] = px # network[px] += network[py] npx, npy = network[px], network[py] if npx >= npy: parent[py] = px network[px] += network[py] else: parent[px] = py network[py] += network[px] t = int(input()) for _ in range(t): f = int(input()) parent.clear() network.clear() for _ in range(f): a, b = input().split() if a not in parent: parent[a] = a network[a] = 1 if b not in parent: parent[b] = b network[b] = 1 union(a, b) print(network[find(parent[a])]) 마지막에 find(parent[a])로 검색해야 한다. union find 알고리즘을 보다보면, 한번에 계속해서 정확하게 부모 집합을 가리키기 못하기 때문이다. Reference 백준(4195번) - 친구 네트워크