실행 시간 제한 | 메모리 제한 |
---|---|
1 초 | 512 MB |
집합(Set)은 중복 없이 여러개의 원소를 담아둘 수 있는 자료구조입니다.
앞에서 배운 리스트는 [ ]으로, 튜플은 ()으로 둘러싸지만, 집합은 {}으로 둘러쌓아 표현합니다.
집합은 중복된 원소를 제거하는데 매우 유용한 자료구조에요
# set type 선언
x:set = set()
# data = {} # x아님x 이렇게 선언하면 dictionary(dict) 가 됩니다!
# 자료형 명시 및 값과 함께 선언
x:set = {1,2,'삼', 4.0, "오"}
# 자료형 생략하기
x = {1,2,'삼', 4.0, "오"}
# 출력하기
print(x)
# 결과
# {1, 2, '오', 4.0, '삼'}
이렇게 집합을 선언할 수 있고 집합 자료형의 예약어는 'set' 입니다.
리스트에 중복된 원소를 없애볼게요
x = [1, 1, 2, 2, 3]
print(x)
# 집합으로 자료형 변환
x2 = set(x)
print(x2)
# 결과
# {1, 2, 3}
이렇게 여러 원소가 중복되어 있는 경우, 집합 자료구조로 타입을 변경(casting)하면 간단하게 중복을 제거할 수 있어요
# 집합 선언
x = {1, 2, 3}
x.add(5) ## 원소 넣기
print(x)
# 결과
# {1, 2, 3, 5}
# 한번에 여러개의 원소 넣기
x.update({3,4,5,6,7})
print(x)
# 결과
# {1, 2, 3, 4, 5, 6, 7}
# 집합 선언
x = {1, 2, 3}
x.remove(3) # 원소 삭제
# x의 원소들{1,2,3} 중 하나의 값을 매개변수(3)로 입력합니다.
print(x)
# 결과
# {1, 2}
# 한번에 여러개의 원소 넣기
x.update({3,4,5,6,7})
print(x)
# 결과
# {1, 2, 3, 4, 5, 6, 7}
# (합집합형태)
대신 집합은 이상적으로는 순서가 없다고 생각하셔야 합니다.
예를 들어볼게요
x = {1,2,3}
x.add(7)
x.add(5)
print(x) # 어떻게 출력될까요?
# {1,2,3,5,7}
x 에 7을 입력하고 5를 입력했는데 {1,2,3,7,5} 로 출력되는 것이 아닌, {1,2,3,5,7} 로 출력되지 않으셨나요?
즉 집합은 순서가 없습니다.
따라서 리스트처럼 인덱스 번호를 사용하여 특정 값에 접근할 수도 없습니다.
또한 집합은 교집합, 합집합, 차집합등을 구할 수 있습니다.
x1 = {1,2,3,4,5}
x2 = {3,4,5,6,7}
print(x1 & x2)
# {3, 4, 5}
x3 = x1.intersection(x2)
print(x3)
# {3, 4, 5}
x1 = {1,2,3,4,5}
x2 = {3,4,5,6,7}
x3 = x1 | x2
print(x3)
# {1, 2, 3, 4, 5, 6, 7}
x3 = x1.union(x2)
print(x3)
# {1, 2, 3, 4, 5, 6, 7}
x1 = {1,2,3,4,5}
x2 = {3,4,5,6,7}
x3 = x1 - x2
print(x3)
# {1, 2}
x3 = x2 - x1
print(x3)
# {6, 7}
x3 = x1.difference(x2)
print(x3)
# {1, 2}
x3 = x2.difference(x1)
print(x3)
# {6, 7}
이제 실습해볼까요?
실습 문제
임의로 주어지는 두개의 집합 X1, X2의
을 구하세요.
두개의 집합이 주어집니다.
첫번째 줄에는 집합 X1
첫번째 줄에는 집합 X2
를 출력합니다.
1,2,3,4,5 2,1,3,7,9,5
{9, 7} {1, 2, 3, 4, 5, 7, 9} {1, 2, 3, 5}
1,2,3,5,7,9 2,1,3,8,6,-1
{8, 6, -1} {1, 2, 3, 5, 6, 7, 8, 9, -1} {1, 2, 3}
출처: 돌핀 코딩