재키재키 2022. 1. 21. 17:24

집합은 기본적으로 중복을 허용하지 않는다. 따라서 다중집합에 관한 문제는 리스트를 사용한다. 

 a = [1, 1, 2, 3, 4, 6]
 b = [1, 2, 3, 3, 4, 5]

 

다중 집합 사이의 연산은? 

다중 합집합의 경우 연산 전에 집합을 복사해서 이용하기로 하자. 

 a = [1, 1, 2, 3, 4, 6]
 b = [1, 2, 3, 3, 4, 5]
 
# 다중 합집합
temp = lst1.copy()
union = lst1.copy()

for i in lst2:
	if i not in temp:
    	union.append(i)
    else:
    	temp.remove(i)
         
# 다중 교집합         
intersection = []

for i in lst2:
    if i in lst1:
        lst1.remove(i)
        intersection.append(i)
        
union = [1, 1, 2, 3, 3, 4, 5, 6]
intersection = [1, 2, 3, 4]

 

아니면 그냥 원소들을 하나씩 가지고 와서 두 집합에서 합집합인 경우 max(), 교집합인 경우 min()을 이용하여 하면 된다. 

a = [1, 1, 2, 2, 3]
b = [1, 2, 2, 4, 5]

gyo = set(a) & set(b)
hap = set(a) | set(b)

# 다중 합집합
union = []
for i in hap:
	for j in range(max(a.count(i),b.count(i))):
    	union.append(i)
        
# 다중 교집합
intersection = []
for i in gyo:
	for j in range(min(a.count(i),b.count(i))):
    	intersection.append(i)
        
union = [1, 1, 2, 2, 3, 4, 5]        
intersection = [1, 2, 2]