새소식

반응형
알고리즘(백준)/백준

[Baekjoon | 백준] 14425번. 문자열 집합 (파이썬/집합과 맵)

2023.03.15
  • -
반응형

총 N개의 문자열로 이루어진 집합 S가 주어진다.

입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 

다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다.

다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다.

입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.

 

출력

첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다.

 
 

예제 입력 1

5 11
baekjoononlinejudge
startlink
codeplus
sundaycoding
codingsh
baekjoon
codeplus
codeminus
startlink
starlink
sundaycoding
codingsh
codinghs
sondaycoding
startrink
icerink

예제 출력 1

4

 

알고리즘 분류

  • 자료 구조
  • 문자열
  • 해시를 사용한 집합과 맵
  • 트리를 사용한 집합과 맵

 

풀이 방식

언뜻 보기에 탐색문제처럼 보일 수 있으나 입력 조건으로 인해 리스트에서 탐색을 진행하면 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)

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.