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

choiyongheon·2024년 1월 12일
1

알고리즘 - 구현

목록 보기
5/5

익숙하지 않던 정렬에 대해 개념 정립하기 좋은 문제인 것 같다

문제에서 정렬 조건은 3가지이다.

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

그 외에도 단어를 저장할 때는 중복되지 않도록 해야한다.

# boj 20920

# 문제 조건 외에도 중복글자를 제거할 필요 있음.

n, m = map(int, input().split(" "))
dic = dict()

for i in range(n):
    st = input()
    if len(st) < m:
        continue
    else:
        if st not in dic:
            dic[st] = 1
        else:
            dic[st] += 1


sorted_dic = sorted(dic.items(), key=lambda x:(-x[1], -len(x[0]), x[0]))

for s in sorted_dic:
    print(s[0])

정렬을 다중으로 해야할 때는, lambda에 대해서 ( ) 안에 조건을 여러개 작성하면 된다. 또한, "-" 를 사용한다면 역순으로 출력할 수 있다.

문제에서는 빈도와 길이는 내림차순, 사전은 오름차순이므로, 빈도와 길이에 -를 붙인다면 해결할 수 있다.

profile
주니어 백엔드 개발자

0개의 댓글