Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
[백준] 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])