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

백준 20920 영단어 암기는 괴로워

문제

화은이는 이번 영어 시험에서 틀린 문제를 바탕으로 영어 단어 암기를 하려고 한다.

그 과정에서 효율적으로 영어 단어를 외우기 위해 영어 단어장을 만들려 하고 있다.

화은이가 만들고자 하는 단어장의 단어 순서는 다음과 같은 우선순위를 차례로 적용하여 만들어진다.

  • 자주 나오는 단어일수록 앞에 배치
  • 해당 단어의 길이가 길수록 앞에 배치
  • 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치

M 보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가 M 이상인 단어들만 외운다고 한다.

화은이가 괴로운 영단어 암기를 효율적으로 할 수 있도록 단어장을 만들어 주자.

입력

  • 첫 번째 줄: 단어의 개수 N, 단어 길이 기준 M
  • 두 번째 줄 ~ : 외울 단어

출력

희은이가 외울 단어들 출력

해결 방식

정렬

  • 딕셔너리를 사용해 단어 입력 횟수, 길이에 대한 정보를 함께 저장한 후 sorted함수를 통해 한 번에 정렬한다.
  • sorted(words.items(), key = lambda x: (조건1, 조건2..)) 식으로 여러 조건을 설정해 정렬한다.

코드

import sys
input=sys.stdin.readline

n, m = map(int, input().split())

words = {}

for i in range(n):
    word = input().strip()
    if len(word) < m:
        continue
    if word not in words:
        words[word] = [1, len(word), word]
    else:
        words[word][0] += 1

result = sorted(words.items(), key = lambda x: (-x[1][0], -x[1][1], x[1][2]))

for word in result:
    print(word[0])

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus