2179-g3 성공
This commit is contained in:
59
workbook_8708/gold/2179-g3.py
Normal file
59
workbook_8708/gold/2179-g3.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# 비슷한 단어
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
input = sys.stdin.readline
|
||||||
|
|
||||||
|
def solution():
|
||||||
|
n = int(input().rstrip())
|
||||||
|
|
||||||
|
now = {"": [(input().rstrip(), i) for i in range(n)]}
|
||||||
|
temp = {}
|
||||||
|
idx = 0
|
||||||
|
while 1:
|
||||||
|
if not now:
|
||||||
|
lst = list(temp.values())
|
||||||
|
print(lst[0][0][0])
|
||||||
|
print(lst[0][1][0])
|
||||||
|
break
|
||||||
|
|
||||||
|
temp = now.copy()
|
||||||
|
now = {}
|
||||||
|
for key in temp:
|
||||||
|
for word, num in temp[key]:
|
||||||
|
if idx >= len(word):
|
||||||
|
continue
|
||||||
|
chr = key+word[idx]
|
||||||
|
if now.get(chr, 0):
|
||||||
|
now[chr].append((word, num))
|
||||||
|
else:
|
||||||
|
now[chr] = [(word, num)]
|
||||||
|
|
||||||
|
for key in list(now.keys()):
|
||||||
|
if len(now[key]) == 1:
|
||||||
|
del now[key]
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
solution()
|
||||||
|
|
||||||
|
"""
|
||||||
|
걸린 시간: 오래 걸림
|
||||||
|
|
||||||
|
시간 복잡도: 모든 글자의 글자수를 보기 때문에 최대 글자수를 m이라고 하면 O(nm)이다. 근데 새로운 키를 만들 때 더하기를 하기 때문애 (O(nm*m))이다.
|
||||||
|
|
||||||
|
해설: 모든 단어들을 한글자씩 보면서 딕셔너리에 그 값을 키로 넣는다. 같은 글씨는 같은 키에 리스트로 모은다.
|
||||||
|
두번째 이상의 글자를 볼때는 이전에 있던 키에 현재 글자를 더한 것을 키로 만들어서 반복한다.
|
||||||
|
글자수가 다 다르기 때문에 현재 봐야하는 idx보다 글자 길이가 작으면 그냥 그 글자는 넘어간다.
|
||||||
|
그 후 각 키에 대해 모인 것들의 개수가 1이면 겹치는 녀석이 없는 것이기 때문에 키를 del 한다.
|
||||||
|
이때 del을 한 후 남은 것이 아무것도 없다면 그 녀석들이 최종 상태였으므로 그 녀석들을 가지고 와서 답을 낸다.
|
||||||
|
그 녀석들은 temp에 분해하기 전에 기록해놓는다.
|
||||||
|
계속 입력된 순서대로 꺼내서 진행했기 때문에 temp에 남은 첫 번째 리스트의 1,2번들이 답이다.
|
||||||
|
|
||||||
|
다른 방법으로 사전순으로 정렬하면 어느정도 prefix가 비슷한 애들끼리 모이기 때문에 인접한 것들끼리만 비교해서 최대 길이를 찾고,
|
||||||
|
그 길이만큼 prefix인 녀석들을 모아서 입력 순서가 가장 빠른 녀석 두 놈을 골라서 주면 된다.
|
||||||
|
정렬할 때 O(nlogn)에 글자수만큼 읽어야 되니까, 결국 정렬이 O(mnlogn)만큼 걸리고, 나머지 인접한 것 비교와 답 찾기는 O(nm)이면 된다.
|
||||||
|
따라서 전체는 O(mnlogn)
|
||||||
|
"""
|
||||||
Reference in New Issue
Block a user