본문 바로가기
코딩테스트/백준

[백준/Python] 14425_문자열 집합_Python 풀이

by vulter3653 2022. 4. 14.

https://www.acmicpc.net/problem/14425

 

14425번: 문자열 집합

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.  다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어

www.acmicpc.net

문자열 집합

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
2초 1546 MB 8910 4856 3323 55.448%

문제


총 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

 

풀이


1. 집합(문제에서의 S, 풀이에서의  x)에 포함되어야 하는 문자열의 개수(문제에서의 N, 풀이에서의 m)와 검사해야하는 문자열의 개수(문제에서의 N, 풀이에서의 n)가 한 줄에 공백을 통해 주어지기에 split()을 통해 공백을 기준으로 두 값을 받아오도록 하였다.

 

2. 받아오는 값에 혹여나 공백이 입력될 경우 제대로된 결과가 나오지 않을 수 있기에 rstrip()을 통해 받아오는 문자열에서의 공백을 제거했다.

 

3. 집합 S (풀이에서의 x)에 해당하는 문자열이 들어왔을 경우에만 확인하면 되기에, 검사해야하는 문자열이 들어왔을 경우 집합 S에 있을 때, 횟수가 하나씩 증가하도록 하였다.

 

*검사해야하는 문자열은 중복으로 주어지지 않는다는 말이 없기에, 검사해야하는 문자열의 집합과의 교집합으로는 제대로 검사를 할 수 없다.*

 

m,n = map(intinput().split())  #집합의 문자열의 개수와 검사해야하는 문자열의 개수 입력

x = set([])                          #기준이 되는 문자열이 들어가는 집합
cnt=0                               #검사되는 문자열이 있을 경우의 횟수

for m in range(m):               #집합에 들어갈 문자열의 개수만큼 반복
  x1 = input().rstrip()            #집합에 들어갈 문자열 입력
  x.add(x1)                         #문자열 집합에 추가

for n in range(n):                #검사해야하는 문자열의 개수만큼 반복
  y1 = input().rstrip()           #검사해야하는 문자열 입력
  if y1 in x:                        #검사하는 문자열이 집합에 있을 경우
    cnt += 1                      #검사되는 문자열이 집합에 포함되어 있을 경우 횟수 1 증가

print(cnt)                          #검사된 결과 출력

 


#sys를 이용하여 입력할 경우
import sys

m,n = map(int, sys.stdin.readline().split())

x = set([])
cnt=0

for m in range(m):
  x1 = sys.stdin.readline().rstrip()
  x.add(x1)

for n in range(n):
  y1 = sys.stdin.readline().rstrip()
  if y1 in x:
    cnt += 1

print(cnt)