- 문제 : 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])
'백준 > String' 카테고리의 다른 글
[문자열/백준] 22233번 : 가희와 키워드 (0) | 2023.06.14 |
---|---|
[문자열/백준] 1213번 : 팰린드롬 만들기 (0) | 2023.06.14 |
[문자열/백준] 2607번 : 비슷한 단어 (0) | 2023.06.12 |
[문자열/백준] 2870번 : 수학숙제 (0) | 2023.06.01 |
[문자열/백준] 11655번 : ROT13 (0) | 2023.06.01 |