사용자로부터 입력받은 세 개의 리스트가 주어졌을 때, 세 리스트 모두에 공통으로 존재하는 요소를 찾아내는 것이 이 프로그램의 목표입니다. 파이썬에서는 리스트를 집합(set)으로 변환한 뒤 교집합(intersection) 메서드를 활용하면 가장 간단하고 효율적으로 문제를 해결할 수 있습니다.
집합은 중복된 값을 허용하지 않는 자료구조이며, 교집합 연산이 해시 기반으로 구현되어 있어 리스트의 요소를 하나씩 일일이 비교하는 방식보다 훨씬 빠르게 동작합니다. 따라서 데이터가 많아질수록 집합을 활용한 접근이 유리합니다.
예제
입력 A = [2, 3, 4, 5, 6] B = [2, 3, 7, 6, 90] C = [2, 3, 45, 34] 출력 공통 요소 = [2, 3]
알고리즘
- 세 개의 리스트 요소를 입력받습니다.
- 각 리스트를
set()함수로 집합으로 변환합니다. - 첫 번째 집합과 두 번째 집합에
intersection()메서드를 적용하여 공통 요소를 구합니다. - 그 결과를 세 번째 집합과 다시 교집합 연산하여 최종 공통 요소를 구한 뒤 출력합니다.
예제 코드
def common_ele(list_a, list_b, list_c):
# 각 리스트를 집합으로 변환
s1 = set(list_a)
s2 = set(list_b)
s3 = set(list_c)
# 교집합 메서드로 공통 요소 찾기
result = s1.intersection(s2).intersection(s3)
# 집합을 리스트로 변환하여 출력
print('공통 요소:', list(result))
if __name__ == '__main__':
lists = []
# 세 개의 리스트 입력받기
for i in range(3):
n = int(input(f'{i + 1}번째 리스트의 크기: '))
print('요소를 입력하세요:')
temp = []
for _ in range(n):
num = int(input())
temp.append(num)
lists.append(temp)
# 함수 호출
common_ele(lists[0], lists[1], lists[2])
실행 결과
1번째 리스트의 크기: 5 요소를 입력하세요: 2 3 4 5 6 2번째 리스트의 크기: 5 요소를 입력하세요: 2 3 7 6 90 3번째 리스트의 크기: 4 요소를 입력하세요: 2 3 45 34 공통 요소: [2, 3]
코드 설명
common_ele() 함수는 세 개의 리스트를 인자로 받아 각각 집합으로 변환합니다. 이후 intersection() 메서드를 연달아 호출하여 세 집합 모두에 포함된 요소만 남기고, 마지막에는 결과 집합을 다시 리스트로 변환해 출력합니다.
교집합은 & 연산자를 사용해서도 동일하게 구할 수 있습니다.
result = s1 & s2 & s3
참고로 집합은 요소의 순서를 보장하지 않으므로, 출력되는 값의 순서는 실행 환경에 따라 달라질 수 있습니다. 순서가 중요하다면 sorted(result)처럼 정렬한 뒤 출력하면 됩니다.