Algorithm/Problems

[백준/파이썬] 14425번 문자열 집합

공부좀하시졍 2022. 11. 18. 10:59

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

 

14425번: 문자열 집합

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

www.acmicpc.net

import sys

read = sys.stdin.readline
        
n,m = list(map(int, read().split()))
cnt = 0

set_input = set([read() for _ in range(n)])

for _ in range(m):
  com_input = read()
  if com_input in set_input:
    cnt += 1

print(cnt)

우선 집합으로 n개의 문장을 받아온다. 이후 비교해줄 m개의 문자열을 받으면서 집합에 존재한다면 즉시 cnt를 올려주는 방식이다.

자료구조에 따라 존재 여부를 따지는 경우(in 사용)에 시간 복잡도가 다르다고 한다.

set과 dict은 hash table 구조 (key에 데이터를 저장하는 구조, key를 통해 데이터를 받아오기 때문에 빠름)를 사용한다.

이때, set은 key만 있고, dict은 key와 value가 있다.

 

[출처 url: https://velog.io/@jswon/%EB%B0%B1%EC%A4%80-14425-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%A7%91%ED%95%A9-python]