oohyoo 님의 블로그

[Python] 프로그래머스 Set 강의자료 본문

코딩테스트

[Python] 프로그래머스 Set 강의자료

oohyoo 2025. 2. 3. 22:12

파이썬의 Set(집합)

set은 파이썬에서 제공하는 집합 자료형으로, 중복을 허용하지 않고, 순서가 없는 데이터 구조입니다.
수학의 집합 개념을 프로그래밍에서 활용할 수 있도록 제공되며, 교집합, 합집합, 차집합과 같은 집합 연산도 지원합니다.


1. Set의 특징

  1. 중복된 값이 허용되지 않음: python s = {1, 2, 2, 3} print(s) # {1, 2, 3}
  • 동일한 값을 여러 번 저장하려고 해도 한 번만 저장됩니다.
  • 순서가 없음:
  • s = {1, 2, 3}
    # print(s[0])  # 오류 발생
    
  • Set은 순서가 없으므로 인덱스로 접근할 수 없습니다.
  • 변경 가능(Mutable):
  • s = {1, "apple", (2, 3)}
    
  • Set 자체는 변경 가능하지만, 내부에 저장된 요소는 변경 불가능한 값이어야 합니다. (예: 숫자, 문자열, 튜플 등은 가능하지만 리스트, 딕셔너리는 불가능)

2. Set 생성 방법

  • Set은 중괄호 {} 또는 set() 함수를 사용해 생성합니다.
  • 빈 Set은 set()으로만 생성 가능 ({}는 빈 딕셔너리로 인식됨).
# Set 생성
s1 = {1, 2, 3}
s2 = set([1, 2, 3])  # 리스트를 집합으로 변환
s3 = set()           # 빈 Set 생성
print(s1, s2, s3)    # {1, 2, 3} {1, 2, 3} set()

3. 자주 사용되는 Set 메소드

메소드설명예제

add(x) 요소 추가 s.add(4)
update(iterable) 여러 요소 추가 (반복 가능한 객체에서) s.update([5, 6])
remove(x) 특정 요소 삭제 (없으면 오류 발생) s.remove(2)
discard(x) 특정 요소 삭제 (없어도 오류 없음) s.discard(2)
pop() 임의의 요소 제거 후 반환 removed = s.pop()
clear() 모든 요소 제거 s.clear()
union(other) 두 집합의 합집합 반환 s1.union(s2)
intersection(other) 두 집합의 교집합 반환 s1.intersection(s2)
difference(other) 두 집합의 차집합 반환 s1.difference(s2)
symmetric_difference(other) 두 집합의 대칭차집합 반환 s1.symmetric_difference(s2)
issubset(other) 부분집합인지 확인 s1.issubset(s2)
issuperset(other) 상위집합인지 확인 s1.issuperset(s2)
isdisjoint(other) 공통 요소가 없는지 확인 s1.isdisjoint(s2)

4. Set 활용 예제

(1) 요소 추가와 삭제

s = {1, 2, 3}
s.add(4)            # 요소 추가
print(s)            # {1, 2, 3, 4}

s.update([5, 6])    # 여러 요소 추가
print(s)            # {1, 2, 3, 4, 5, 6}

s.remove(3)         # 요소 삭제 (없으면 오류)
print(s)            # {1, 2, 4, 5, 6}

s.discard(10)       # 요소 삭제 (없어도 오류 없음)
print(s)            # {1, 2, 4, 5, 6}

(2) 집합 연산

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

# 합집합 (Union)
print("합집합:", a | b)  # {1, 2, 3, 4, 5, 6}
print("합집합 (메소드):", a.union(b))  # {1, 2, 3, 4, 5, 6}

# 교집합 (Intersection)
print("교집합:", a & b)  # {3, 4}
print("교집합 (메소드):", a.intersection(b))  # {3, 4}

# 차집합 (Difference)
print("차집합:", a - b)  # {1, 2}
print("차집합 (메소드):", a.difference(b))  # {1, 2}

# 대칭차집합 (Symmetric Difference)
print("대칭차집합:", a ^ b)  # {1, 2, 5, 6}
print("대칭차집합 (메소드):", a.symmetric_difference(b))  # {1, 2, 5, 6}

(3) 부분집합, 상위집합, 공통 요소 확인

a = {1, 2, 3}
b = {1, 2, 3, 4, 5}

# 부분집합 확인
print(a.issubset(b))  # True

# 상위집합 확인
print(b.issuperset(a))  # True

# 공통 요소가 없는지 확인
c = {6, 7}
print(a.isdisjoint(c))  # True

5. Set을 활용한 응용

(1) 리스트에서 중복 제거

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers)  # [1, 2, 3, 4, 5]

(2) 두 리스트의 중복 요소 찾기

list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]

common = set(list1) & set(list2)  # 교집합
print("중복 요소:", common)  # {3, 4}

(3) 문자열에서 고유한 문자 추출

text = "hello world"
unique_chars = set(text)
print(unique_chars)  # {'e', 'd', ' ', 'o', 'h', 'w', 'l', 'r'}

6. 정리

  • Set의 주요 특징:
    • 중복을 허용하지 않고 순서가 없음.
    • 수학적인 집합 연산(합집합, 교집합, 차집합 등)을 지원.
  • 자주 사용되는 메소드:
    • add, remove, union, intersection 등.
  • 활용 예제:
    • 리스트에서 중복 제거, 공통 요소 찾기, 고유 값 추출 등.
반응형