barcode

백준 14425번 풀이

BOJ/[BOJ] Python

문제

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

 

14425번: 문자열 집합

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

www.acmicpc.net

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

 

풀이

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

 

사실 이 파트 들어갔으면 해시 테이블에 대해 서술을 해야 하는데 이거는 내가 이해를 못했음... 부스트코스 복기해야되나... 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개로 쳐버릴 수 있거든. 그것때문에 리스트는 틀렸나... 아무튼 그래요.

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 10816번 풀이  (0) 2023.08.10
백준 7785번 풀이  (0) 2023.08.04
백준 19532번 풀이  (0) 2023.07.20
백준 24313번 풀이  (0) 2023.07.17
백준 24267번 풀이  (0) 2023.07.15