집합 이론에서 집합 A의 여집합(complement)은 A에 속하지 않는 원소들을 의미합니다. 또한 집합 B를 기준으로 한 A의 상대 여집합(relative complement)은 흔히 'A와 B의 차집합'이라고 불립니다. 이 글에서는 바로 이 차집합 개념을 활용하여 두 리스트 사이의 누락된 값과 추가된 값을 찾아보겠습니다.
Python은 set 자료형에서 difference() 함수를 기본적으로 제공하므로, 별도의 라이브러리 설치 없이 손쉽게 구현할 수 있습니다.
알고리즘
1단계 : 사용자로부터 입력받은 두 개의 리스트 A와 B를 생성한다.
2단계 : 리스트 A와 B를 각각 set(집합)으로 변환한다.
3단계 : 첫 번째 리스트의 누락된 값을 찾기 위해 B - A 차집합을 구한다.
(B에는 있지만 A에는 없는 값)
4단계 : 첫 번째 리스트의 추가된 값을 찾기 위해 A - B 차집합을 구한다.
(A에는 있지만 B에는 없는 값)
5단계 : 두 번째 리스트에 대해서도 동일한 절차를 적용한다.
예제 코드
# 두 리스트의 누락된 요소와 추가된 요소 찾기
A = list()
B = list()
n1 = int(input("첫 번째 리스트의 크기를 입력하세요 ::"))
n2 = int(input("두 번째 리스트의 크기를 입력하세요 ::"))
print("첫 번째 리스트의 요소를 입력하세요 ::")
for i in range(int(n1)):
k = int(input(""))
A.append(k)
print("두 번째 리스트의 요소를 입력하세요 ::")
for j in range(int(n2)):
k1 = int(input(""))
B.append(k1)
# 첫 번째 리스트의 누락 및 추가 요소 출력
print("첫 번째 리스트의 누락된 값:", (set(B).difference(A)))
print("첫 번째 리스트의 추가된 값:", (set(A).difference(B)))
# 두 번째 리스트의 누락 및 추가 요소 출력
print("두 번째 리스트의 누락된 값:", (set(A).difference(B)))
print("두 번째 리스트의 추가된 값:", (set(B).difference(A)))
실행 결과
첫 번째 리스트의 크기를 입력하세요 :: 6
두 번째 리스트의 크기를 입력하세요 :: 5
첫 번째 리스트의 요소를 입력하세요 ::
1
2
3
4
5
6
두 번째 리스트의 요소를 입력하세요 ::
4
5
6
7
8
첫 번째 리스트의 누락된 값: {7, 8}
첫 번째 리스트의 추가된 값: {1, 2, 3}
두 번째 리스트의 누락된 값: {1, 2, 3}
두 번째 리스트의 추가된 값: {7, 8}
결과 해석
실행 결과를 살펴보면 다음과 같이 해석할 수 있습니다.
- 누락된 값 {7, 8} : 두 번째 리스트에는 존재하지만 첫 번째 리스트에는 없는 값입니다.
- 추가된 값 {1, 2, 3} : 첫 번째 리스트에는 존재하지만 두 번째 리스트에는 없는 값입니다.
참고 사항
리스트를 set으로 변환하면 중복된 요소는 자동으로 제거되며, 결과 역시 집합 형태로 반환됩니다. 만약 순서가 유지된 결과가 필요하다면 sorted() 함수를 함께 사용하는 것이 좋습니다. 예를 들어 sorted(set(B).difference(A))처럼 작성하면 정렬된 리스트 형태로 결과를 얻을 수 있습니다.