총 N개의 문자열로 이루어진 집합 S가 주어진다.
입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.
출력
첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다.
예제 입력 1
5 11
baekjoononlinejudge
startlink
codeplus
sundaycoding
codingsh
baekjoon
codeplus
codeminus
startlink
starlink
sundaycoding
codingsh
codinghs
sondaycoding
startrink
icerink
알고리즘 분류
- 자료 구조
- 문자열
- 해시를 사용한 집합과 맵
- 트리를 사용한 집합과 맵
풀이 방식
언뜻 보기에 탐색문제처럼 보일 수 있으나 입력 조건으로 인해 리스트에서 탐색을 진행하면 M개의 문자열들에 대해서 O(N)의 탐색을 해야 하기 때문에 사실상 O(N^2)의 코드가 되어버려 시간초과가 발생한다.
그렇기 때문에 집합 혹은 딕셔너리를 사용하여 풀면된다.
1번 풀이: 성공
N, M = map(int, input().split())
s = set([input() for _ in range(N)])
count = 0
for _ in range(M):
c = input()
if c in s:
count += 1
print(count)