반응형
https://www.acmicpc.net/problem/20920
20920번: 영단어 암기는 괴로워
첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단
www.acmicpc.net
import sys
n, m = map(int, sys.stdin.readline().split())
words = {}
for _ in range(n):
word = sys.stdin.readline().rstrip()
if len(word) < m:
continue
if word not in words:
words[word] = words.get(word, 0) + 1
else:
words[word] += 1
words = sorted(words.items(),key=lambda x : (-x[1], -len(x[0]), x[0]))
for word, count in words:
print(word)
먼저 sys
모듈을 이용하여 입력값을 받아옵니다.
- input() 함수를 사용할 경우 시간초과가 나왔습니다.
- 반복문으로
n
개의 단어를 입력받습니다.
이때 길이가 m
이상인 경우에만 words
라는 딕셔너리에 저장합니다.
words
는 word
를 key
로 각 단어의 등장 횟수를 value
로 갖도록 합니다.
words.get(word, 0)
은 딕셔너리words
에서key
가word
인 항목을 찾아 반환합니다.- 만약 해당
key
가 존재하지 않는다면 기본값으로0
을 반환하도록 하고 반환된 값에1
을 더하여 해당 단어의 등장 횟수를 기록합니다.
모든 단어의 등장 횟수를 계산하고 나면 words
딕셔너리를 정렬합니다.
sorted()
함수의key
옵션에lambda
함수를 사용하여 정렬을 합니다. 정렬 기준을 아래와 같습니다.
-x[1]
: 등장 횟수를 내림차순으로 정렬len(x[0])
: 단어 길이에 대하여 내림차순 정렬x[0]
: 단어의 사전순으로 오름차순 정렬
마지막으로 words
에서 단어를 하나씩 출력합니다.
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 덧칠하기 파이썬(Python) (0) | 2023.03.03 |
---|---|
[코딩테스트] 프로그래머스 정수 삼각형 파이썬(Python) (0) | 2023.03.02 |
[코딩테스트] 백준 비밀번호 발음하기 파이썬(Python) (0) | 2023.02.27 |
[코딩테스트] 프로그래머스 대충 만든 자판 파이썬(Python) (0) | 2023.02.27 |
[코딩테스트] 백준 안전 영역 파이썬(Python) (0) | 2023.02.25 |