문제
https://www.acmicpc.net/problem/20920
풀이
특정 길이 이상의 문자열을 입력받아 아래의 3가지의 조건으로 정렬하는것이 핵심이다.
1. 각 단어별 등장횟수를 기록해둔 숫자를 내림차순
2. 등장 횟수가 같다면 단어의 길이로 내림차순
3. 단어의 길이가 같다면 알파벳순
단어별 등장 횟수 기록은 defaultdict(int)를 이용하여 처음 등장하면 딕셔너리에 단어가 추가되며 값으로 1이 저장되고 두번째로 등장하면 값에 1씩 추가되는 방식으로 기록하였다.
sorted(iterable 한 객체, key=lambda x: (-조건1, -조건2, 조건3))
sorted와 key에 lambda식을 사용하면 첫번째 인자인 iterable 한 객체를 여러 조건으로 정렬가능하다.
이 문제에서는 조건1과 조건 2에 -를 붙여서 내림차순으로 정렬하였다.
이때 딕셔너리를 넣는다면 딕셔너리의 키만 정렬되상이 된다.
sorted_keys = sorted(example_dict, key=lambda x: (-조건1, -조건2, 조건3))
sorted_keys = sorted(example_dict.keys(), key=lambda x: (-조건1, -조건2, 조건3))
따라서 이 두줄의 식은 동일한 역할을 수행한다.
정답 코드
import sys
from collections import defaultdict
input = sys.stdin.readline
N, M = map(int, input().split())
words = defaultdict(int)
for i in range(N):
word = input().strip()
if len(word) < M:
continue
words[word] += 1
sorted_keys = sorted(words, key=lambda x: (-words[x], -len(x), x))
print('\n'.join(sorted_keys))
코틀린 버전의 풀이와 코드는 다음 포스팅 참조
[백준/Kotlin] 20920번. 영단어 암기는 괴로워
문제https://www.acmicpc.net/problem/20920 풀이특정 길이 M 이상의 문자열을 입력받아 아래의 3가지의 조건으로 정렬하는것이 핵심이다. 1. 각 단어별 등장횟수를 기록해둔 숫자를 내림차순2. 등장
medandro.com
'알고리즘 > 백준' 카테고리의 다른 글
[백준/Python] 1515번. 수 이어 쓰기 (0) | 2025.02.05 |
---|---|
[백준/Kotlin] 20920번. 영단어 암기는 괴로워 (0) | 2025.02.04 |
[백준/Python] 11726번. 2×n 타일링 (0) | 2024.11.20 |
[백준/Python] 21314번. 민겸 수 (0) | 2024.11.17 |
[백준/Python] 20300번. 서강근육맨 (0) | 2024.11.17 |