백준 14425번 풀이

문제

주어진 집합 안에 있는 단어가 아래 집합에서 몇 개나 포함되는지를 확인하시오

풀이

솔직히 김구라짤 넣고싶다… 보자마자 눈으로 욕했기때문…

사실 이 파트 들어갔으면 해시 테이블에 대해 서술을 해야 하는데 이거는 내가 이해를 못했음… 부스트코스 복기해야되나… OTL

아무튼 풀어봅시다. 이게 보자마자는 뭔 개소린가 싶을텐데 일단 예제를 보자.

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

여기서 위에 5줄이 체크할 단어가 있는 집합이고, 아래 11개가 체크할 집합이다.

import sys

M, N = map(int,sys.stdin.readline().split())

word_list = set()
cnt = 0

for i in range(M):
    a = sys.stdin.readline().rstrip()
    word_list.add(a)

for i in range(N):
    check = sys.stdin.readline().rstrip()
    if check in word_list:
        cnt += 1

print(cnt)

일단 이게 정답 맞다. 체크할 단어가 들어있는 set을 만든 다음, 체크할 단어를 입력받아서 세트에 있으면 하나씩 추가해서 세는 뭐 그런 식인데… 근데 처음에 리스트 써서 한 게 틀렸음… 근데 왜 틀린지 모르겠음… 리스트는 체크할 단어 리스트/찾을 리스트 나눠서 입력받고 다 했는데 틀려써…

그래서 질문 게시판을 찾다가 알게 된 건데, 아래 세트에는 중복되는 단어가 없다. 근데 위쪽 세트에는 중복되는 단어가 있을 수도 있다. 리스트는 중복 처리를 안하지만 세트는 중복 처리를 하기 때문에 만약 체크할 단어를 5개 받는데 그 중 하나가 중복이면 4개로 쳐버릴 수 있거든. 그것때문에 리스트는 틀렸나… 아무튼 그래요.