[Beakjoon] 4195. 친구 네트워크

2025. 1. 8. 23:18·코딩테스트/Python
728x90
반응형

🔗 Problem Link

https://www.acmicpc.net/problem/4195


❔Thinking

  • 친구 관계가 주어지면, 해당 친구 네트워크에 속한 인원 수를 반환한다.
  • 친구 네트워크는, root가 같은 사람들을 뜻한다.

💻Solution

import sys
input = sys.stdin.readline

def find_parent(x, parent):
    if x != parent[x]:
        parent[x] = find_parent(parent[x], parent)
    return parent[x]

def union(a, b, parent, size):
    a = find_parent(a, parent)
    b = find_parent(b, parent)
    if a != b:
        if size[a] < size[b]:
            a, b = b, a
        parent[b] = a
        size[a] += size[b]

T = int(input().rstrip())
answer = []
for _ in range(T):
    F = int(input().rstrip())
    people_dict = {}
    parent = []
    size = []

    for _ in range(F):
        f1, f2 = input().split()
        
        if f1 not in people_dict:
            people_dict[f1] = len(parent)
            parent.append(len(parent))
            size.append(1)
        if f2 not in people_dict:
            people_dict[f2] = len(parent)
            parent.append(len(parent))
            size.append(1)
        
        union(people_dict[f1], people_dict[f2], parent, size)
        
        root = find_parent(people_dict[f1], parent)
        answer.append(size[root])

for a in answer:
    print(a)

🗝️keypoint

  1. 친구의 친구를 하나의 네트워크로 계산하려면, union을 새로운 관계가 생길때마다 전부 반복해야한다. (시간초과 발생)
  2. size 배열은 해당 root 집합의 인원수를 확인할 수 있다. union시 root의 size에 해당 친구가 속한 인원을 전부 더해간다.
저작자표시

'코딩테스트 > Python' 카테고리의 다른 글

[Beakjoon] 9663. N-Queen  (0) 2025.01.16
[Programmers] Level 2. 광물 캐기  (0) 2025.01.11
[Programmers] Level 2. 퍼즐 게임  (0) 2025.01.06
[Programmers] Level 2. 디펜스 게임  (0) 2025.01.06
[Beakjoon] 20040. 사이클 게임  (0) 2025.01.03
'코딩테스트/Python' 카테고리의 다른 글
  • [Beakjoon] 9663. N-Queen
  • [Programmers] Level 2. 광물 캐기
  • [Programmers] Level 2. 퍼즐 게임
  • [Programmers] Level 2. 디펜스 게임
swwho
swwho
일상을 데이터화하다
  • swwho
    하루한장
    swwho
  • 전체
    오늘
    어제
    • 분류 전체보기 (187) N
      • ML_DL (38) N
        • MUJAKJUNG (무작정 시리즈) (17) N
        • 딥러닝 공부하기 (21)
      • 데이터사이언스 (1)
        • EDA (1)
        • 데이터과학을 위한 통계 (0)
      • 데이터엔지니어링 (2)
      • 논문리뷰 (2)
        • Computer Vision (2)
      • Python 활용하기 (12)
      • 코딩테스트 (127)
        • Python (109)
        • MySQL (14)
      • Git (3)
      • MySQL 활용하기 (0)
      • 일상 이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
swwho
[Beakjoon] 4195. 친구 네트워크
상단으로

티스토리툴바