[백준] 20920: 영단어 암기는 괴로워 - 파이썬[python]

다인·2024년 10월 19일

백준

목록 보기
83/112
post-thumbnail

정렬의 우선순위에 대해 공부할 수 있는 문제다.

코드

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
dic = dict()
note = []

for _ in range(N):
    word = input().strip()
    if len(word) >= M:
        if word in dic:
            dic[word] += 1 
        else:
            dic[word] = 1
dic = dict(sorted(dic.items())) # 알파벳 순으로 정렬

dic = dict(sorted(dic.items(), key = lambda x : (-x[1], -len(x[0]))))
print(*dic, sep='\n')
  • 단어가 등장하는 빈도를 저장하기 위해 딕셔너리를 떠올렸다.
  • 알파벳 순으로 정렬하는 게 가장 마지막이다. 그래서 빈도와 길이로 정렬하기 전에 오름차순으로 정렬을 먼저 해주었다. 그래야 빈도와 길이로 정렬하고 나서도 알파벳순으로 정렬이 잘 돼있다.
  • 그리고 lambda를 이용해서 빈도와 길이로 정렬해 준다.
  • 사실 여기선 둘 다 내림차순이기에 아래와 같이 써도 된다. 그치만 -를 붙이면 내림차순으로 된다는 걸 새로 알게 되어서 써보았당ㅎ
key = lambda x : (x[1], len(x[0])), reverse=True)
  • -는 보통 내림차순, 오름차순 섞여 있을 때 쓰는 것 같다. 이걸 활용해보면 아래와 같이 다시 쓸 수도 있겠다.
import sys
input = sys.stdin.readline

N, M = map(int, input().split())
dic = dict()
note = []

for _ in range(N):
    word = input().strip()
    if len(word) >= M:
        if word in dic:
            dic[word] += 1 
        else:
            dic[word] = 1

dic = dict(sorted(dic.items(), key = lambda x : (-x[1], -len(x[0]), x[0])))
print(*dic, sep='\n')

결과

  • 가장 첫 코드의 결과
  • 첫 코드에서 reverse=True만 바꾼 코드의 결과
  • 알파벳 정렬까지 lamdba의 순서로 지정해준 결과

오호 -를 쓴 것보다 reverse=True를 쓴 게 더 빠르다. 오름차순, 내림차순이 섞여 있을 때만 -를 써야겠다.

0개의 댓글