✅ 중복을 제거하고 싶다면 set()을 활용한다
✅ set()은 리스트를 집합으로 변환하며, 자동으로 중복된 요소를 제거한다.
✅ 집합 연산(교집합, 합집합, 차집합)도 쉽게 처리할 수 있다.
📌 set() 함수란?
set() 함수는 집합 자료형을 생성하는 함수이다.
집합은 중복을 허용하지 않으며, 순서가 없는 자료형이다.
📌 set(iterable) → iterable(반복 가능한 객체)을 집합으로 변환
a = [2, 1, 3, 4, 5, 5, 6, 7, 3]
unique_a = set(a)
print(unique_a) # {1, 2, 3, 4, 5, 6, 7}
print(len(unique_a)) # 7 (중복 제거됨)
📌 리스트에서 중복 제거하기
📌 리스트를 set()으로 변환 → 다시 리스트로 변환
a = [2, 1, 3, 4, 5, 5, 6, 7, 3]
b = ['lee', 'yun', 'park', 'yun', 'bang', 'lee']
# 중복 제거
unique_a = list(set(a))
unique_b = list(set(b))
print(unique_a) # [1, 2, 3, 4, 5, 6, 7]
print(unique_b) # ['bang', 'yun', 'lee', 'park']
📌 집합 연산 (set 연산 메서드)
집합을 활용하면 교집합, 합집합, 차집합 연산을 쉽게 할 수 있다.
a = {'lee', 'yun', 'park'}
b = {'yun', 'bang', 'lee'}
# 교집합 (intersection)
print(a.intersection(b)) # {'yun', 'lee'}
# 합집합 (union)
print(a.union(b)) # {'lee', 'bang', 'yun', 'park'}
# 차집합 (difference)
print(a.difference(b)) # {'park'}
print(b.difference(a)) # {'bang'}
📌 set() vs frozenset() 차이점
함수 | 특징 |
set() | 가변형 (요소 추가/삭제 가능) |
frozenset() | 불변형 (요소 추가/삭제 불가능) |
# set은 요소 추가 가능
mutable_set = set(['lee', 'yun', 'park'])
mutable_set.add('bang')
print(mutable_set) # {'lee', 'yun', 'park', 'bang'}
# frozenset은 요소 추가 불가능 (오류 발생)
immutable_set = frozenset(['lee', 'yun', 'park'])
immutable_set.add('bang') # AttributeError 발생
📌 set() 활용 - 백준 2776번 (암기왕 문제)
✅ 문제링크 🔗 백준 2776번 - 암기왕
📝 문제 설명
- 수첩1에 적힌 숫자가 수첩2에 있는지 확인해야 함.
- set()을 사용하면 탐색 속도를 O(1)으로 빠르게 처리할 수 있음.
💡 해결 방법
✅ set()을 사용하여 수첩1을 집합으로 변환 → 빠르게 탐색 가능
✅ sys.stdin.readline()을 사용하여 입력 속도 최적화
🔹 코드 구현
import sys
#입력값 받기
T = int(sys.stdin.readline().rstrip())
#문제풀이 Set() 사용
for i in range(0, T):
# 수첩1 입력 (set으로 변환하여 중복 제거)
cnt1 = int(sys.stdin.readline().rstrip())
memo1 = set(map(int,sys.stdin.readline().rsplit()))
# 수첩2 입력
cnt2 = int(sys.stdin.readline().rstrip())
memo2 = list(map(int,sys.stdin.readline().rsplit()))
# 수첩2의 요소가 수첩1에 있는지 확인
for j in memo2:
if j in memo1:
print(1)
else:
print(0)
🔹 실행 예제
입력
1
5
4 1 5 2 3
5
1 3 7 9 5
출력
1
1
0
0
1
📌 마무리 - 정리
✅ set()을 활용하면 중복 제거와 **빠른 탐색(O(1))**이 가능
✅ set()을 활용하면 교집합, 합집합, 차집합 연산이 편리
✅ set()은 가변형, frozenset()은 불변형
✅ 백준 2776번(암기왕) 문제를 통해 set()을 실전에서 활용 가능
'코딩라이브러리 > 파이썬' 카테고리의 다른 글
백준 2164 큐, deque 연습 (0) | 2024.05.31 |
---|---|
파이썬 스택, 큐 deque (with 백준 18258) (0) | 2024.05.30 |
파이썬 Counter (with 백준 10815, 10816) (0) | 2024.05.28 |
파이썬 람다 함수 lambda (with 백준 1181) (0) | 2024.05.27 |
파이썬 정렬 sort, sorted (with 백준 2750, 5597, 1181) (0) | 2024.05.24 |