[Boj문제풀이]

[Boj/백준] 14425 Python

ki7348 2021. 8. 20. 10:19

문제 출처: https://www.acmicpc.net/problem/14425

 

14425번: 문자열 집합

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

www.acmicpc.net

 

 

1. 문제 접근 방식

처음에는 간단하게 in으로 구현하려고 했다.

하지만 시간초과가 발생했다...

리스트 두개를 만들고 각 리스트의 원소를 순서대로 정렬시키고 투 포인터 알고리즘처럼 리스트의 겹치는 값들을 비교해 나갔다.

 

 

2. 내가 푼 코드

import sys
n, m = map(int,sys.stdin.readline().split())

narr=[]
marr=[]
count = 0
for _ in range(n):
    narr.append(sys.stdin.readline().strip())

narr.sort()

for _ in range(m):
    marr.append(sys.stdin.readline().strip())

marr.sort()

nindex = 0
mindex = 0

while nindex < n and mindex < m:
    if narr[nindex] == marr[mindex]:
        count+=1
        mindex+=1
    elif narr[nindex] > marr[mindex]:
        mindex+=1
    else:
        nindex+=1

print(count)

 

 

3. 결과 및 느낀점

쉽게 풀려고하다가 시간 초과가 났다.

위 방식으로 수정해서 구현한 결과 실행 시간이 현저하게 줄었다.

효율적인 알고리즘을 구현하기 위한 노력이 필요할 것 같다.

'[Boj문제풀이]' 카테고리의 다른 글

[Boj/백준] 1181 Python  (0) 2021.08.23
[Boj/백준] 4889 Python  (0) 2021.08.21
[Boj/백준] 1543 Python  (0) 2021.08.19
[Boj/백준] 1316 Python  (0) 2021.08.18
[Boj/백준] 2941 Python  (0) 2021.08.18