본문 바로가기
코딩테스트

[Python] 백준 - 영단어 암기는 괴로워

by 박매트 2024. 5. 16.

https://www.acmicpc.net/problem/20920

 

나의 답 (틀림)

from collections import defaultdict

n, m = map(int, input().split())
strings = [input() for _ in range(n)]

r_string = defaultdict(int)
p_result = []

for i in strings:
    if len(i) >= m:
        r_string[i] += 1

r_string = dict(sorted(r_string.items(), key=lambda x: x[0]))
r_string = dict(sorted(r_string.items(), key=lambda x: len(x[0]),reverse=True))
r_string = dict(sorted(r_string.items(), key=lambda x: x[1],reverse=True))

for k,v in r_string.items():
    print(k)

 

전체 값을 기준으로 우선순위 거꾸로 해서 소트를 3번 했다.

테스트 코드 상으로는 예제 답처럼 나왔는데 계속 시간 초과가 떴다.

 

아무래도, sort 한 값 중에 sort 하고.. sort 한 값 중에 sort를 해야할 듯 싶다?.. 아니면 다른 숨겨진 케이스가 있다던가.

 

다른 사람 답

import sys

N, M = map(int, sys.stdin.readline().split())

d = {}
for _ in range(N):
    word = sys.stdin.readline().rstrip()
    
    if (len(word) < M):
        continue
        
    if (word in d):
        d[word] += 1
    else:
        d[word] = 1

d = sorted(d.items(), key = lambda x : x[0])
d = sorted(d, key = lambda x : len(x[0]), reverse=True)
d = sorted(d, key = lambda x : x[1], reverse=True)

for i in d:
    print(i[0])

 

답을 보니, for문을 여러번 돌려서 오류가 난 것 같기도 하다.

한 번의 for문에 처리할 수 있다면 처리를 해야겠다.

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 백준 - 제로  (0) 2024.05.21
[Python] 백준 - 연구소  (0) 2024.05.18
[Python] 백준 - 덩치  (0) 2024.05.14
[Python] 백준 - 퇴사  (0) 2024.05.13
[Python] 백준 - 한수  (0) 2024.05.13