공부하기/백준

[Python] 백준 풀기 14425 - 문자열 집합

XEV 2022. 9. 26. 20:30

파이썬 백준 14425번

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

 

14425번: 문자열 집합

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

www.acmicpc.net

 

 

 

문제 보기

 

 

 

문제 풀기

아무 생각 없이 쉬워 보이는 문제를 선택하고 풀고 나서, 기록과 정리를 위해 이곳에 글을 쓰다가 이 문제는 arrray 를 사용하는 게 아니라 set() 을 사용해야 한다는 생각이 들었다.

다시 수정하여 정답을 제출. set() 사용 연습을 하자.

 

N 번 받아오는 각 문자열을 S 에 차례대로 추가를 한 후, set 또는 array 안에 해당 원소가 있는지 확인하는 코드를 작성함.

확인 시 해당 원소가 있다면 변수 count 를 하나씩 증가시켜 정답의 개수를 도출.

 

 

 

코드 보기

@ array 를 사용하여 풀었을 때,

import sys
inputdata = sys.stdin.readline

N, M = map(int, inputdata().split())
S = []

for _ in range(N):
    source = inputdata().strip()
    S.append(source)

count = 0
for _ in range(M):
    check_word = inputdata().strip()
    if check_word in S:
        count += 1

print(count)



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

# 4

 

@ set 을 사용하여 풀었을 때,

import sys
inputdata = sys.stdin.readline

N, M = map(int, inputdata().split())
S = set()

for _ in range(N):
    source = inputdata().strip()
    S.add(source)

count = 0
for _ in range(M):
    check_word = inputdata().strip()
    if check_word in S:
        count += 1

print(count)



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

# 4

 

@ array 와 set 차이

위: set, 148 ms

아래: array, 3728 ms