- 문제 : https://www.acmicpc.net/problem/20920

 

문제 이해 

- 입력되는 단어 중에 길이 m 이상의 단어들을 저장한 뒤 출력하는데 다음과 같은 규칙으로 출력해야 한다.

  1. 가장 자주 나오거나

  2.횟수가 같다면 문자의 길이가 긴 순서로

  3. 길이마저 같다면 알파벳 순서로 단어들을 출력하는 문제다. 

- 단어 개수를 세기 위해 numbers라는 딕셔너리를 활용하고, 각 key에 대한 value는 [횟수, 길이]로 설정했다. 

- 위의 순서대로 sorted()를 이용해 다중 정렬을 한 뒤, 각 단어들을 정렬된 순서대로 출력하면 된다. 

# 다중 정렬은 (기준 컬럼1, 기준 컬럼2,,,)으로 설정하면 된다
# 만약 특정 기준 컬럼이 기존과 반대되는 정렬 방식을 사용한다면 앞에 '-'를 붙여주면 된다.
result = sorted(numbers.items(), key = lambda x : (-x[1][0], -x[1][1], x[0]))

- 풀이로직은 알았지만, rstrip()을 하지 않아 틀린 출력을 해서 약간 헤맸던 문제다. 

 

정답 풀이 

import sys
input = sys.stdin.readline

n, m = map(int, input().rstrip().split())

numbers = {} # [횟수, 길이]
for _ in range(n):
    word = input().rstrip()
    k = len(list(word))
    if  k >= m:
        if word in numbers.keys():
            numbers[word][0] += 1
        else:
            numbers[word] = [1, k]
            
result = sorted(numbers.items(), key = lambda x : (-x[1][0], -x[1][1], x[0]))
for i in range(len(result)):
    print(result[i][0])

+ Recent posts