이 글에서는 사용자로부터 입력받은 두 개의 리스트에 공통 요소가 하나라도 존재하는지 확인하는 파이썬 프로그램을 다룹니다. 가장 기본적인 방법인 순회(traversal) 기법을 사용하여, 첫 번째 리스트의 각 요소를 두 번째 리스트의 모든 요소와 차례대로 비교하는 방식입니다.
예시
입력 : A = [10, 20, 30, 50]
B = [90, 80, 30, 10, 3]
출력 : FOUND
입력 : A = [10, 20, 30, 50]
B = [100, 200, 300, 500]
출력 : NOT FOUND
알고리즘
commonelement(A, B) — A와 B는 사용자가 입력한 두 개의 리스트입니다.
- 결과를 저장할 변수
c를 선언하고 초기값을 "NOT FOUND"로 설정합니다. - 이중 반복문으로 두 리스트를 순회하며, 첫 번째 리스트의 모든 요소를 두 번째 리스트의 모든 요소와 비교합니다.
- 공통 요소가 발견되면
c에 "FOUND"를 저장하고 즉시 반환하며, 끝까지 발견되지 않으면 "NOT FOUND"를 반환합니다.
예제 코드
# 두 리스트에 최소 한 개의 공통 요소가 있는지
# 리스트 순회를 통해 확인하는 파이썬 프로그램
def commonelement(A, B):
c = "NOT FOUND"
# 첫 번째 리스트 순회
for i in A:
# 두 번째 리스트 순회
for j in B:
# 공통 요소를 발견한 경우
if i == j:
c = "FOUND"
return c
return c
# 드라이버 코드
A = list()
B = list()
n1 = int(input("첫 번째 리스트의 크기를 입력하세요 ::"))
print("첫 번째 리스트의 요소를 입력하세요 ::")
for i in range(n1):
k = int(input(""))
A.append(k)
n2 = int(input("두 번째 리스트의 크기를 입력하세요 ::"))
print("두 번째 리스트의 요소를 입력하세요 ::")
for i in range(n2):
k = int(input(""))
B.append(k)
print("실행 결과 ::", commonelement(A, B))
실행 결과
첫 번째 리스트의 크기 ::4 첫 번째 리스트의 요소 :: 2 1 4 9 두 번째 리스트의 크기 ::5 두 번째 리스트의 요소 :: 9 90 4 89 67 실행 결과 :: FOUND 첫 번째 리스트의 크기 ::4 첫 번째 리스트의 요소 :: 67 89 45 23 두 번째 리스트의 크기 ::4 두 번째 리스트의 요소 :: 1 2 3 4 실행 결과 :: NOT FOUND
더 효율적인 방법: set(집합) 활용하기
위 이중 반복문 방식의 시간 복잡도는 O(n×m)으로, 리스트의 크기가 커지면 성능이 떨어질 수 있습니다. 파이썬의 set 자료형과 교집합 연산자(&)를 사용하면 훨씬 간결하고 빠르게 같은 결과를 얻을 수 있습니다.
def commonelement(A, B):
return "FOUND" if set(A) & set(B) else "NOT FOUND"
집합 변환은 O(n+m)의 시간 복잡도를 가지므로, 데이터 크기가 클 때 특히 유용합니다. 상황에 따라 가독성 좋은 순회 방식과 효율적인 집합 방식 중 적절한 방법을 선택하면 됩니다.