백준
[백준] 20920번 : 영단어 암기는 괴로워 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트
우당탕탕 개발자
2023. 12. 12. 13:13
728x90
반응형
20920번: 영단어 암기는 괴로워
첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단
www.acmicpc.net
1. 문제 설명
2. 풀이과정
- sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
- 영어 지문에 나오는 단어의 개수와 외울 단어의 길이 기준을 입력받는다. N, M = map(int, sys.stdin.readline().split())
- 영어 단어와 해당 단어가 나온 횟수를 저장할 딕셔너리를 생성한다. d = {}
- 영어 단어의 개수만큼 반복하며 for _ in range(N)
- 단어를 입력받는다. word = sys.stdin.readline().rstrip()
- 만약 해당 단어의 길이가 외울 단어의 길이 기준보다 짧으면 if (len(word) < M)
- 해당 단어는 외우지 않는다. continue
- 만약 해당 단어가 이미 나온 단어라 딕셔너리에 있다면 if (word in d)
- 해당 단어가 나온 횟수를 1 증가시킨다. d[word] += 1
- 반면에 해당 단어가 처음 나온 단어이면 else
- 해당 단어를 딕셔너리에 추가한다. d[word] = 1
- 정렬할 때는 정렬 기준이 낮은 것부터 적용해야 가장 마지막에 적용하는 정렬 기준대로 적용이 된다.
- 하여 가장 마지막 정렬 기준인 알파벳 사전 순으로 오름차순 정렬한다. d = sorted(d.items(), key = lambda x : x[0])
- 그다음 정렬 기준인 단어의 길이 순으로 내림차순 정렬한다. d = sorted(d, key = lambda x : len(x[0]), reverse=True)
- 마지막 정렬 기준인 단어가 나온 횟수를 기준으로 내림차순 정렬한다. d = sorted(d, key = lambda x : x[1], reverse=True)
- 최종 정렬한 딕셔너리를 하나씩 불러오며 for i in d
- 단어를 하나씩 출력한다. print(d[0])
반응형
3. 소스코드
import sys
N, M = map(int, sys.stdin.readline().split())
d = {}
for _ in range(N):
word = sys.stdin.readline().rstrip()
if (len(word) < M):
continue
if (word in d):
d[word] += 1
else:
d[word] = 1
d = sorted(d.items(), key = lambda x : x[0])
d = sorted(d, key = lambda x : len(x[0]), reverse=True)
d = sorted(d, key = lambda x : x[1], reverse=True)
for i in d:
print(i[0])
728x90
반응형