[algorithm] 백준 20920 - 영단어 암기는 괴로워
안녕하세요. 심심한 코딩쟁이입니다.
오늘은 백준 20920번 문제 - 영단어 암기는 괴로워 의 풀이를 살펴보도록 하겠습니다.
풀이에 사용한 언어는 Python3 입니다.
문제 해석과 풀이 다 함께 살펴보시죠.
백준 BAEKJOON 20920
반응형
문제 해석
문제에서는 N개의 단어가 주어지는데 단어의 길이가 M 이상인 단어만을 단어장에 적어달라고합니다.
단어장을 적을 때의 조건이 3가지 존재합니다.
자주 나온 단어일수록 앞으로, 단어 길이가 길수록 앞으로, 알파벳 사전순으로 정렬을 해서 단어장에 적어야합니다.
앞에 나온 조건을 우선적으로 정렬 기준으로 삼아야합니다.
힌트 : 우리가 리스트나 딕셔너리를 정렬할 때 사용했던 방식을 잘 생각해봅시다. lambda를 사용했었던....
풀이
# 20920 영단어 암기는 외로워
import sys
N, M = map(int, sys.stdin.readline().rstrip().split())
word_dict = {}
for _ in range(N):
word = sys.stdin.readline().rstrip()
if len(word) < M:
continue
else:
if word in word_dict:
word_dict[word] += 1
else:
word_dict[word] = 1
word_dict = sorted(word_dict.items(), key = lambda x : (-x[1], -len(x[0]), x[0]))
for i in word_dict:
print(i[0])
풀이 해석 및 팁
단어의 길이를 체크해서 추가하는 것과 개수를 다루는 부분은 큰 어려움이 없으니 설명 생략하겠습니다.
정렬 부분에서 람다 뒤에 나오는 조건들에 대해 설명하겠습니다.
x[0]에는 단어가 들어있고 x[1]에는 단어의 등장 횟수가 들어있습니다.
제일 우선적으로 단어의 등장 횟수가 많은것을 앞으로 오도록 정렬의 조건을 주어야합니다.
그래서 x[1]이 아닌 -x[1]를 첫 조건으로 넣어줍니다. 만약 x[1]을 넣는다면 등장 횟수가 적은 단어가 앞으로 옵니다.
다음으로는 단어의 길이이 길수록 앞으로 오게하기위해 -len(x[0]) 을 두 번째 조건으로 사용합니다.
마지막으로 알파벳 사전순 정렬을 적용하기위해서 x[0]을 조건에 추가해줍니다.
여기까지 백준 20920번 통계학 문제 풀이였습니다.
이번 문제의 정답률은 47% 정도입니다.
정렬의 조건이 크게 어렵지는 않았지만 하나 하나 적용하려면 귀찮은 상황이 생길 수 있었던 문제였습니다.
우리는 깔끔하게 sorted를 사용하면서 lambda로 간단하게 조건을 만들어 달아주었습니다.
헷갈리는 부분이 있으시면 댓글로 남겨주시기 바랍니다.
감사합니다.
반응형
'programming > algorithm' 카테고리의 다른 글
[algorithm] 백준 10870 - 피보나치 수 5 (0) | 2023.05.01 |
---|---|
[algorithm] 백준 27433 - 팩토리얼 2 (0) | 2023.04.30 |
[algorithm] 백준 2108 - 통계학 (0) | 2023.04.28 |
[algorithm] 백준 26069 - 붙임성 좋은 총총이 (0) | 2023.04.27 |
[algorithm] 백준 25192 - 인사성 밝은 곰곰이 (0) | 2023.04.26 |