집합

Arin·2026년 3월 3일

집합이란?

중복을 허용하지 않고, 순서가 없는 원소들의 모임입니다. 파이썬의 set 타입이 해당됩니다.

Set 역시 내부적으로 해시 테이블을 기반으로 동작하기 때문에 데이터 조회 속도가 매우 빠릅니다.

장점
원소의 존재 여부를 매우 빠르게 확인할 수 있습니다. (평균 시간 복잡도: O(1))

데이터를 추가하는 순간 자동으로 중복이 제거됩니다.

교집합, 합집합 등 유용한 집합 연산을 기본으로 지원합니다.

단점

  • 순서가 없기 때문에 인덱스([0], [1])로 접근할 수 없습니다.
  • Key-Value 형태가 아닌, 값 자체만 저장합니다.

언제 사용할까?

  • 목록에서 중복된 값을 간단히 제거하고 싶을 때
  • 데이터의 존재 여부만 빠르게 확인하고 싶을 때 (백준 1920번 문제)
  • 데이터 그룹 간의 공통점이나 차이점을 찾아야 할 때 (교집합, 차집합 등)
# 리스트의 중복 제거하기
my_list = [1, 2, 2, 3, 4, 4, 4, 5]
unique_set = set(my_list)
print(unique_set) 
# 출력: {1, 2, 3, 4, 5}

주요 함수 및 사용법 (Python Set 기준)

  • add(value): 원소 추가

  • remove(value): 원소 삭제 (삭제할 원소가 없으면 에러 발생)

  • discard(value): 원소 삭제 (삭제할 원소가 없어도 에러 발생 안 함)

  • in: 존재 여부 확인

my_set = {1, 2, 3}
my_set.add(4)      # {1, 2, 3, 4}
my_set.remove(2)   # {1, 3, 4}

# 존재 여부 확인
if 3 in my_set:
    print("3은 집합에 포함되어 있습니다.")

집합 연산

  • & 또는 intersection(): 교집합 (둘 다에 있는 원소)

  • | 또는 union(): 합집합 (모든 원소)

    • 또는 difference(): 차집합 (한쪽에만 있는 원소)
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}

print(set_a & set_b)  # 교집합: {3, 4}
print(set_a | set_b)  # 합집합: {1, 2, 3, 4, 5, 6}
print(set_a - set_b)  # 차집합: {1, 2}
profile
헤맨만큼이 내 땅이다

0개의 댓글