From 618f6dc8bf357ea94e6d614da20df39519a8f4fd Mon Sep 17 00:00:00 2001 From: sm4640 Date: Wed, 25 Mar 2026 18:32:45 +0900 Subject: [PATCH] =?UTF-8?q?2179-g3=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workbook_8708/gold/2179-g3.py | 59 +++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 workbook_8708/gold/2179-g3.py diff --git a/workbook_8708/gold/2179-g3.py b/workbook_8708/gold/2179-g3.py new file mode 100644 index 0000000..eb4093c --- /dev/null +++ b/workbook_8708/gold/2179-g3.py @@ -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) +""" \ No newline at end of file