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
💡문제 분석 요약
영단어를 입력받고, 자주 입력받은 횟수, 단어 길이, 사전순으로 정렬하여 출력한다.
💡알고리즘 설계
1. 해시를 이용하여 key에 단어를, value에 단어가 입력된 횟수를 하나씩 늘리면서 저장한다.
- hash에 입력받은 단어가 있는지 체크하고, 없으면 hash[word]=1, 있으면 hash[word]+=1로 갯수를 추가한다.
2. 해시의 key를 value가 높은 순, len(value)가 긴 순, 사전 순으로 람다식을 이용해 정렬한다.
- 해시의 item을 정렬하려면 hash.items()로 아이템을 선택해야한다.
- 람다식을 이용해 정렬할때, -x로 x 앞에 -를 붙이면 기존 기준의 역순으로 정렬한다. 여러 조건을 우선순위에 따라 차례대로 적으면 된다.
💡코드
from collections import deque
import sys
input = sys.stdin.readline
import sys
input = sys.stdin.readline
N, M=map(int, input().split())
hash={}
result=[]
for _ in range(N):
word=input().rstrip()
if len(word)>=M:
if word in hash:
hash[word]+=1
else:
hash[word]=1
result=sorted(hash.items(), key=lambda x: (-x[1], -len(x[0]), x[0]))
for i in result:
print(i[0])
💡시간복잡도
정렬: O(nlogn)
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준 5397번] 키로거 - 파이썬 (2) | 2024.03.23 |
---|---|
[백준 2630번] 색종이 만들기 - 파이썬 (1) | 2024.03.16 |
[백준 1913번] 달팽이 - 파이썬 (0) | 2024.03.09 |
[백준 18429번] 근손실 - 파이썬 (0) | 2024.03.09 |
[백준 13305번] 주유소 - 파이썬 (0) | 2024.03.02 |