알고리즘 연습/집합과 맵

[🥈4 / 백준 1764 / 파이썬] 듣보잡

김세진 2021. 7. 12. 01:42
반응형
 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

 

문제

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 영어 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

 

듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.

출력

듣보잡의 수와 그 명단을 사전순으로 출력한다.

 

예제 입력 

3 4
ohhenrie
charlie
baesangwook
obama
baesangwook
ohhenrie
clinton

예제 출력 

2
baesangwook
ohhenrie




 

풀이

 

리스트를 받아서 중복된 것만 사전 순으로 출력하는 문제이다.

 

N,M은 최대 500,000으로 매우 크기 때문에 자칫하면 시간초과가 발생할 수 있다.

 

파이썬의 경우 dictionary 자료형을 사용해 빠르게 값을 찾을 수 있다.

 

많은 값을 받으니 sys.stdin.readline의 사용은 필수이다.

 

readline을 사용해 문자열을 받을 때, 개행 문자까지 받게 되므로 rstrip()을 해 주는 것도 잊지 말자.

 

import sys
input = sys.stdin.readline

n,m = map(int,input().split())
L = dict()
result = []
for i in range(n):
    L[input().rstrip()] = i
    
for i in range(m):
    temp = input().rstrip()
    if L.get(temp) != None:
        result.append(temp)
    # 목록에 없는 경우 None을 반환하게 되는 것을 이용

result.sort()
# 사전 순으로 정렬

print(len(result))
for i in result:
    print(i)
반응형