천 리 길도 한 걸음부터

[python] BOJ 14425번: 문자열 집합 (220108) 본문

👩‍💻 STUDY/알고리즘

[python] BOJ 14425번: 문자열 집합 (220108)

눅눅한 김말이 2022. 1. 8. 15:40
 

14425번: 문자열 집합

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

www.acmicpc.net

  결과   시간 초과
  소요 시간   20분
  언어   Python 3

 

이 방법 말고는 풀 수 없는 것 같은데 왜 안되지 하는 마음에 정답을 빨리 봤다. [알고리즘 분류] Trie 알고리즘을 잘 모르기도 했었다. 아무래도 자료구조 지식이 많이 부족하다고 느껴져서 오늘부터 CS 공부도 시작해야겠다. 10분 정도만 더 봤으면 충분히 알아낼 수 있었겠다. 결론은 2중 for문을 사용하면 안 된다. 여기서 strip()find() 함수를 다시 알 수 있었다. strip()을 사용하지 않으면 "\n" 개행 문자가 함께 들어간다. d.find(s[i])에서 d에 몇 번째에 s[i]가 있는지 알 수 있는데 없는 경우 -1, 존재하는 경우 0부터 해당 자리의 숫자가 반환된다.

# import sys

# input = sys.stdin.readline
# n, m = map(int, input().split())
# s, data, result = [], [], 0

# for i in range(n):
#   s.append(input().strip())
# for j in range(m):
#   data.append(input().strip())

# for i in range(n):
#   for d in data:
#     if d.find(s[i]) != -1:
#       result += 1
#       break

# print(result)
  결과   맞았습니다!!
  소요 시간   0분
  언어   Python 3

 

검사해야 하는 문자열이 문제에서 왜 알파벳으로 정의되어있지 않을까 했는데 정답에서 그 이유를 알 수 있었다. 그때그때 받아서 확인하면 되기 때문이다. if data in s:집합 s 안에 data 문자열이 있으면 True이다.

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
s, result = [],  0

for _ in range(n):
  s.append(input().strip())

for j in range(m):
  data = input().strip()
  if data in s:
    result += 1

print(result)