이 문제에서는 두 개의 리스트가 주어졌을 때, 두 리스트 간의 차이를 출력하는 것이 목표입니다. 파이썬은 이를 손쉽게 처리할 수 있도록 set() 메서드를 제공하며, 여기서는 바로 이 메서드를 활용합니다.
셋(set)은 중복 요소가 없는 순서 없는(unordered) 컬렉션입니다. 또한 셋 객체는 합집합(union), 교집합(intersection), 차집합(difference), 대칭 차집합(symmetric difference)과 같은 수학적 연산도 지원합니다.
예제
입력:: A = [10, 15, 20, 25, 30, 35, 40]
B = [25, 40, 35]
출력:
[10, 20, 30, 15]
설명
차이 리스트 = A - B
즉, 첫 번째 리스트 A에는 존재하지만 두 번째 리스트 B에는 없는 요소들만 추출하여 결과로 반환합니다.
알고리즘
1단계: 두 개의 배열(리스트)을 입력받습니다. 2단계: 리스트를 명시적으로 셋(set)으로 변환합니다. 3단계: 뺄셈 연산자(-)를 사용해 한 셋에서 다른 셋을 빼줍니다.
예제 코드
# set()을 사용하여 두 리스트의 차이를 구하는 파이썬 코드
def Diff(A, B):
print("두 리스트의 차이 ::>")
return (list(set(A) - set(B)))
# 드라이버 코드
A = list()
n1 = int(input("첫 번째 리스트의 크기를 입력하세요 ::"))
print("첫 번째 리스트의 요소를 입력하세요 ::")
for i in range(int(n1)):
k = int(input(""))
A.append(k)
B = list()
n2 = int(input("두 번째 리스트의 크기를 입력하세요 ::"))
print("두 번째 리스트의 요소를 입력하세요 ::")
for i in range(int(n2)):
k = int(input(""))
B.append(k)
print(Diff(A, B))
실행 결과
첫 번째 리스트의 크기를 입력하세요 ::5 첫 번째 리스트의 요소를 입력하세요 :: 11 22 33 44 55 두 번째 리스트의 크기를 입력하세요 ::4 두 번째 리스트의 요소를 입력하세요 :: 11 55 44 99 두 리스트의 차이 ::> [33, 22]
참고: 셋은 순서가 없기 때문에 결과 리스트의 요소 순서는 실행 시마다 달라질 수 있습니다. 만약 원본 리스트의 순서를 유지한 채 차이를 구하고 싶다면 리스트 컴프리헨션(list comprehension)을 사용하는 방법도 있습니다. 예를 들어 [x for x in A if x not in B]와 같이 작성하면 A의 순서를 그대로 유지하면서 B에 없는 요소만 필터링할 수 있습니다.