Coding Cantabile

[BOJ] #14425_문자열 집합(Python3, 파이썬) 본문

Coding Test/BOJ

[BOJ] #14425_문자열 집합(Python3, 파이썬)

Gracekim 2022. 12. 3. 15:21

본 게시글은 백준 저지 알고리즘 문제를 '파이썬, Python3' 언어로 풀이한 내용을 주관적으로 정리하였으며, 내용과 관련된 코드리뷰 및 피드백 환영합니다.

티어

Silver I

문제

총 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
4

풀이

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
s1 = [input().rstrip() for _ in range(N)]
s2 = [input().rstrip() for _ in range(M)]

cnt = 0
for str in s2:
    if str in s1:
        cnt += 1

print(cnt)

s2를 받는 반복문 내에 s1의 값이 s2와 같냐는 반복문과 조건문을 함사용하니 시간초과가 발생하였다. 그래서 s2를 받는 for문을 따로 작성해주고, s2의 값이 s1과 같은지 여부를 묻는 구문을 따로 작성해주니 바로 통과하였다. 

문제 자체는 그냥 존재 여부를 물어보는 문제이기 때문에 cnt 변수를 증가해주기만 하면 되서 어렵진 않았다.