본문 바로가기
Algorithm/Python

[백준 14425번] 문자열 집합

by _sweep 2022. 4. 17.

문제 링크 >> https://www.acmicpc.net/problem/14425

 

 

📋 문제

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

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

 

 

👉 입력

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

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

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

입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다.

집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.

 

 

👈출력

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

 

 

📝 풀이

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
d = {}
for _ in range(n):
  temp = input().rstrip()
  d[temp] = 0
  
for _ in range(m):
  temp = input().rstrip()
  if temp in d:
    d[temp] += 1
    
print(sum(d.values()))

 

집합 S에는 중복된 문자열이 주어지지 않고 M개의 문자열에 대해 이 문자열들이 각각 S에 포함되어 있는지 확인해야 하기 때문에 해시 맵을 사용했다.

 

먼저 집합 S에 해당하는 N개의 문자열을 d에 담는다.

이때 value는 모두 0으로 통일한다.

 

다음으로 M개의 검사할 문자열들을 받는다.

그리고 입력을 받을 때마다 d에 있는지 확인한다.

만약 d에 있다면 value를 1 증가시킨다.

 

M개의 문자열 검사가 모두 끝났다면 d의 value들에는 각 문자열이 얼마나 등장했는지 저장되어있다.

따라서 이들의 합을 출력한다.

 

 

 

 

 

 

'Algorithm > Python' 카테고리의 다른 글

[백준 21921번] 블로그  (0) 2022.05.10
[LeetCode] 36. Valid Sudoku  (0) 2022.04.17
[백준 1966번] 프린터 큐  (0) 2022.04.15
[백준 2263번] 트리의 순회  (0) 2022.04.14
[백준 1935번] 후위 표기식2  (0) 2022.04.14

댓글