From 10ac4d6d2ed36c39d5fb05bb91d01a5f13acf0d3 Mon Sep 17 00:00:00 2001 From: nkey Date: Tue, 3 Feb 2026 10:12:42 +0900 Subject: [PATCH] =?UTF-8?q?20920-s3=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workbook_8708/20920-s3.py | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 workbook_8708/20920-s3.py diff --git a/workbook_8708/20920-s3.py b/workbook_8708/20920-s3.py new file mode 100644 index 0000000..6fad637 --- /dev/null +++ b/workbook_8708/20920-s3.py @@ -0,0 +1,59 @@ +# 영단어 암기는 괴로워 + +import sys +import heapq + +input = sys.stdin.readline + +def set_priority(words, word): + word_info = words.get(word, None) + frequency, length = 0, 0 + if word_info: + frequency = -(word_info[0]) + 1 + length = -(word_info[1]) + else: + frequency = 1 + length = len(word) + + words[word] = [-frequency, -length, word, 0] + return words[word] + +def solution(): + n, m = map(int, input().rstrip().split()) + words = {} + + word_list = [] + + for i in range(n): + word = input().rstrip() + + if len(word) < m: + continue + + heapq.heappush(word_list, set_priority(words, word)) + + for i in range(len(word_list)): + f, l, w, is_pop = heapq.heappop(word_list) + if words.get(w)[3]: + continue + else: + print(w) + words[w][3] = 1 + + return + + +solution() + +""" +걸린 시간: 35분 + +시간 복잡도: set_priority는 단어 길이를 세고, 정보를 dict에서 읽고 쓰는 것인데 m은 최대 10이므로 전체 시간복잡도는 O(1)이다. +solution 함수에서 n개의 단어를 보며 set_priority를 실행하고, heap에 push하므로 요소당 O(logn)이기 때문에 O(nlogn)이다. +마지막으로 word_list를 확인할 때도 heap에서 pop이므로 O(nlogn)이다. 따라서 전체 시간복잡도는 O(nlogn)이다. + +해설: heap에서 정렬할 때 우선순위 3가지로 정렬하도록 리스트를 넣는다. +그러기 위해 word_info dict을 만들어서 정보 업데이트를 O(1)에 한다. +단어마다 정보를 업데이트 해가며 heap에 넣고, 다 넣은 다음 heappop 하면서 기존에 안 나온 것들만 출력을 한다. +좀 빠르게 해보겠다고 heap 써서 O(nlogn)으로 했지만 그냥 Counter 하고, 우선순위 역순으로 sort 3번 하면 이것도 O(nlogn)이다... +""" \ No newline at end of file