
https://www.acmicpc.net/problem/1764
두 개의 명단을 입력받은 뒤, 두 명단에서 겹치는 이름을 찾아 출력하면 된다.
결국 교집합을 찾는 문제이므로 파이썬의 경우 set 자료형을 이용하면 된다.
sys.stdin.read으로 데이터를 한꺼번에 입력받아 input 변수에 저장한 뒤, 아래처럼 코드를 작성했다.
data = input().split()
n, m = int(data[0]), int(data[1])
unheard = set(data[2:n+2])
unseen = set(data[n+2:n+2+m])
입력받은 데이터의 인덱스 2 요소부터 n개만큼 듣도 보도 못한 사람들의 이름이므로, 이를 set으로 변환해 중복을 제거한다. (집합으로 변환해주는 것과 같다.) 보도 못한 사람들의 경우에도 똑같이 m개만큼 set으로 변환한다.
아래 코드를 통해 교집합을 계산하고 정렬한다.
res = sorted(unheard & unseen)
& 연산자를 통해 두 집합의 교집합을 찾으며,
sorted() 를 통해 데이터를 사전순으로 정렬한 후 res에 리스트를 저장한다.
import sys
input = sys.stdin.read
data = input().split()
n, m = int(data[0]), int(data[1])
unheard = set(data[2:n+2])
unseen = set(data[n+2:n+2+m])
res = sorted(unheard & unseen)
print(len(res))
for name in res:
print(name)