반응형
문제
https://www.acmicpc.net/problem/20920
풀이 코드
# 다음과 같은 우선순위를 차례로 적용하여 만들어진다.
#
# 자주 나오는 단어일수록 앞에 배치한다.
# 해당 단어의 길이가 길수록 앞에 배치한다.
# 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다
#
# M보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가 M이상인 단어들만 외운다고 한다.
import sys
from collections import defaultdict
input = sys.stdin.readline
n,m = map(int,input().split())
word_list = defaultdict(int)
for i in range(n):
word = input().strip()
if len(word) >= m:
word_list[word] +=1
sort_dict = sorted(word_list.items() ,key =lambda x : (-x[1],-len(x[0]),x[0]))
for i in sort_dict:
print(i[0])
문제 접근
1. 자주 나오는 단어일수록 앞에 배치한다.
2. 해당 단어의 길이가 길수록 앞에 배치한다.
3. 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다.
위 3개의 조건에 맞춰 단어를 정렬하면 된다. M글자수보다 작은 길이의 글자들은 defaultdict에 추가하지않는다.
defaultdict을 통해 빠르게 중복된 글자의 개수를 구해준다. 이후, sorted 함수와 lambda함수를 통해 정렬을 진행한다.
해당 문제를 풀면서 key값으로 정렬을 진행할때, 튜플 형식으로 정렬 조건을 나열하면 순차적으로 정렬을 진행하는것을 배웠다.
-x[1]을 통해 단어의 개수를 기반으로 정렬하고, -len(x[0])을 통해 단어의 길이를 기반으로 정렬, x[0]을 통해 알파벳 사전순으로 정렬을 진행했다.
'Algorithm > baekjoon' 카테고리의 다른 글
Baekjoon [5972] 택배배송 - python (0) | 2024.03.07 |
---|---|
Baekjoon [14889] 스타트와 링크 - python (0) | 2024.03.06 |
Baekjoon [17471] 게리맨더링 - python (0) | 2024.03.05 |
Baekjoon [2116] 주사위 쌓기 - python (0) | 2024.03.05 |
Baekjoon [2212] 센서 - python (0) | 2024.03.04 |