본문 바로가기
파이썬알고리즘

백준 20920 영단어 암기는 어려워 파이썬

by zho 2024. 8. 26.

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

 

 

문제핵심

단어를 여러 개 입력받은 후 3가지 조건으로 정렬을 하면 되는 문제이다.

1. 단어의 빈도수

2. 단어의 길이

3. 단어의 알파벳 사전순서

 

문제에서 다중조건의 정렬이 있다면 dictionary와 lambda를 이용해서 풀면 효과적이라는 것을 생각하자!

 

코드

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
d = {}

for _ in range(N):
    word = input().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[1], -len(x[0]), x[0]))

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

 

여기서 x[1]은 dic에서 value인 단어빈도수이며, x[0]은 key인 단어 그 자체이다.

따라서

-x[1] : 단어 빈도수 순서 정렬 (내림차순)

-len(x[0]) : 단어 길이 순서 정렬 (내림차순)

x[0] : 사전 순서 정렬 (오름차순)

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

 

728x90