뚝딱햄 탈출기

[Python][백준 BOJ Silver IV] 1269. 대칭 차집합 : set 자료형을 이용한 교집합/합집합/차집합 구하기 본문

Algorithm & Data structure/알고리즘 문제 풀이

[Python][백준 BOJ Silver IV] 1269. 대칭 차집합 : set 자료형을 이용한 교집합/합집합/차집합 구하기

hyrmzz1 2024. 1. 2. 20:56

❌ 접근 방식

교집합을 구한 후, A + B의 개수에서 2 * (A ∩ B의 개수)를 빼야겠다고 생각했다.

교집합을 구하기 위해 이중 for문을 사용해 A와 B에 중복되는 요소의 개수 즉 교집합의 개수를 구했다.

❌ Solution 1 - 시간 초과

import sys
an, bn = map(int, sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
b = list(map(int, sys.stdin.readline().split()))

cnt = 0
for i in a:
    for j in b:
        if i == j:  # 교집합
            cnt += 1
print(an + bn - cnt * 2)

교집합을 구하는 연산자나 라이브러리가 있을까 하고 찾아보니 set 자료형을 활용하면 집합 연산을 할 수 있다는 걸 알게 되었다!

💡 set의 집합 연산

교집합

set1 = set([1,2,3,4,5])
set2 = set([3,4,5,6,7])

print(set1 & set2)	# {3, 4, 5}
print(set.intersection(set1, set2))	# {3, 4, 5}
print(set1.intersection(set2))	# {3, 4, 5}

합집합

set1 = set([1,2,3,4,5])
set2 = set([3,4,5,6,7])

print(set1 | set2)	# {1, 2, 3, 4, 5, 6, 7}
print(set.union(set1, set2))	# {1, 2, 3, 4, 5, 6, 7}
print(set1.union(set2))	# {1, 2, 3, 4, 5, 6, 7}

차집합

set1 = set([1,2,3,4,5])
set2 = set([3,4,5,6,7])

print(set1 - set2)	# {1, 2}
print(set.difference(set1, set2))	# {1, 2}
print(set1.difference(set2))	# {1, 2}

print(set2 - set1)	# {6, 7}
print(set.difference(set2, set1))	# {6, 7}
print(set2.difference(set1))	# {6, 7}

대칭차집합 (XOR)

set1 = set([1,2,3,4,5])
set2 = set([3,4,5,6,7])

print(set1 ^ set2)	# {1, 2, 6, 7}
print(set.symmetric_difference(set1, set2))	# {1, 2, 6, 7}
print(set1.symmetric_difference(set2))	# {1, 2, 6, 7}

✅ Solution 2

대칭차집합 연산자 사용

import sys
an, bn = map(int, sys.stdin.readline().split())
a = set(map(int, sys.stdin.readline().split()))
b = set(map(int, sys.stdin.readline().split()))

xor = a ^ b    # 대칭차집합
print(len(xor))

교집합 연산자 사용

import sys
an, bn = map(int, sys.stdin.readline().split())
a = set(map(int, sys.stdin.readline().split()))
b = set(map(int, sys.stdin.readline().split()))

inter = a & b    # 교집합
print(an + bn - 2 * len(inter))

 

easy


https://www.acmicpc.net/problem/1269

 

1269번: 대칭 차집합

첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어

www.acmicpc.net

https://dojang.io/mod/page/view.php?id=2315

 

파이썬 코딩 도장: 26.2 집합 연산 사용하기

이제 세트에서 집합 연산과 이에 대응하는 메서드를 사용해보겠습니다. 집합 연산은 파이썬의 산술 연산자와 논리 연산자를 활용합니다. | 연산자는 합집합(union)을 구하며 OR 연산자 |를 사용합

dojang.io

Comments