Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 내일배움캠프 프로젝트
- tanstack query
- 리액트 공식문서
- 파이썬 enumerate
- typeScript
- 파이썬 replace
- useState
- 파이썬 for in
- 타입스크립트 리액트
- 코딩테스트
- React Hooks
- 내일배움캠프 최종 프로젝트
- 파이썬 slice
- 타입스크립트
- Next 팀 프로젝트
- 파이썬 반복문
- 리액트 프로젝트
- 리액트 훅
- JavaScript
- 리액트 공식 문서
- 내일배움캠프
- 자바스크립트
- useEffect
- REACT
- 리액트
- 내배캠 프로젝트
- 프로그래머스
- 파이썬 딕셔너리
- 파이썬 for
- 한글 공부 사이트
Archives
- Today
- Total
sohyeon kim
[Python] 백준 : 영단어 암기는 괴로워 20920, dic, key=lambda, -x[1], -len(x[0]), x[0] 본문
Coding Test
[Python] 백준 : 영단어 암기는 괴로워 20920, dic, key=lambda, -x[1], -len(x[0]), x[0]
aotoyae 2024. 10. 7. 20:22728x90
반응형
📝 문제
화은이는 이번 영어 시험에서 틀린 문제를 바탕으로 영어 단어 암기를 하려고 한다. 그 과정에서 효율적으로 영어 단어를 외우기 위해 영어 단어장을 만들려 하고 있다. 화은이가 만들고자 하는 단어장의 단어 순서는 다음과 같은 우선순위를 차례로 적용하여 만들어진다.
- 자주 나오는 단어일수록 앞에 배치한다.
- 해당 단어의 길이가 길수록 앞에 배치한다.
- 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다
M 보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가 M 이상인 단어들만 외운다고 한다. 화은이가 괴로운 영단어 암기를 효율적으로 할 수 있도록 단어장을 만들어 주자.
🫠 나의 풀이
import sys
sys.stdin = open('input.txt', 'r')
# input = sys.stdin.readline
N, M = map(int, input().split())
dic = dict()
for _ in range(N):
word = input().strip()
if word in dic: dic[word] += 1
elif len(word) >= M: dic[word] = 1
sorted_dic = sorted(dic.items(), key=lambda x: (-x[1], -len(x[0]), x[0]))
# -x[1]: 빈도수(x[1])의 내림차순. x[1]은 단어의 빈도를 나타내므로, -를 붙여 빈도수가 높은 단어가 우선되도록 함.
# -len(x[0]): 단어의 길이(len(x[0]))를 내림차순으로 정렬. 길이가 긴 단어가 앞에 오도록 -를 사용.
# x[0]: 단어 자체(x[0])를 알파벳 사전 순으로 오름차순 정렬.
for word, _ in sorted_dic:
print(word)
🧞♂️ 다른 사람의 풀이
import sys
from collections import Counter
input = sys.stdin.readline
n, m = map(int, input().split())
word = []
for _ in range(n):
input_word = input().rstrip()
word.append(input_word)
counter = Counter(w for w in word if len(w) >= m)
words = list(counter)
# 알파벳 사전 순 정렬
words.sort()
# 단어 길이 정렬
words.sort(key = len, reverse = True)
# 빈도수로 정렬
words.sort(key = counter.get, reverse = True)
# 최종 결과 출력
print('\n'.join(words))
🔗 https://www.acmicpc.net/problem/20920
728x90
반응형
'Coding Test' 카테고리의 다른 글
[Python] 백준 : 카드2 2164, deque, 덱, 큐 (0) | 2024.10.24 |
---|---|
[Python] 백준 : 구간 합 구하기 4 11659, 누적 합, 부분 합, 부분 구간 (0) | 2024.10.10 |
[Python] 백준 : 골드바흐 파티션 17103, 소수 구하기, 에라토스테네스의 체 (0) | 2024.09.27 |
[Python] 백준 : 소수 구하기 1929, for-else문 (0) | 2024.09.26 |
[Python] 프로그래머스 : [PCCE 기출문제] 10번 / 공원 340198, sort, set (2) | 2024.09.25 |