Post

[백준] 2179 파이썬

문제


  • 백준 2179 (골드 4)

백준 2179

n가지 단어가 주어질 때, 같은 접두사를 가진 두 가지 단어중에서 그 접두사의 길이가 최대인 두 단어를 출력하는 문제였다.
여기서 접두사의 길이가 최대인 경우가 여러 개일때에는 입력되는 순서대로 앞쪽에 있는 단어가 출력되도록 해야 했다.

image

내 코드


따로 알고리즘을 사용하기보다는 단순 구현으로 문제를 풀어봤다.
이중 for문을 돌면서 두가지 단어를 뽑아서 이를 처음부터 비교하는 형식으로 코드를 작성해 보았다.
접두사의 길이가 최대일 때마다 정답을 갱신하면서 진행하는 방식으로 구현하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys
input = sys.stdin.readline

n = int(input())
words = [input().strip() for _ in range(n)]

ans_len=0
ans=[]
for i in range(n):
    for j in range(i+1,n):
        word1, word2 = words[i], words[j]
        min_len = min(len(word1), len(word2))
        max_len, length = 0, 0
        for k in range(min_len):
            if word1[k] != word2[k]:
                max_len = max(max_len, length)
                break
            else:
                length += 1
        if length == min_len:
            max_len = max(max_len, length)
        if ans_len < max_len:
            ans = [word1,word2]
            ans_len = max_len

print(ans[0])
print(ans[1])

day16

파이썬으로 제출하니 시간초과가 발생하여서 혹시 몰라서 PyPy3로 다시 제출하였는데 통과하였다.
아마 파이썬으로도 통과할 수 있는 코드가 있을 것 같은데 알고리즘을 고민하고 다시 풀어봐야할 것 같다.

This post is licensed under CC BY 4.0 by the author.