728x90
반응형
문제
화은이는 이번 영어 시험에서 틀린 문제를 바탕으로 영어 단어 암기를 하려고 한다. 그 과정에서 효율적으로 영어 단어를 외우기 위해 영어 단어장을 만들려 하고 있다. 화은이가 만들고자 하는 단어장의 단어 순서는 다음과 같은 우선순위를 차례로 적용하여 만들어진다.
- 자주 나오는 단어일수록 앞에 배치한다.
- 해당 단어의 길이가 길수록 앞에 배치한다.
- 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다
이상인 단어들만 외운다고 한다. 화은이가 괴로운 영단어 암기를 효율적으로 할 수 있도록 단어장을 만들어 주자.
보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가
내 생각
정렬문제 이다 ! sorted써야지부터 생각했다!
- 자주 나오는 단어일수록 앞에 배치한다. → 내림차순
- 해당 단어의 길이가 길수록 앞에 배치한다. → 내림차순
- 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다 → 오름차순
아 그리고 중요한건 길이 M 미만 단어들은 단어장에 추가하지 않는다. (M이상 단어들만 외움)
그리고 위의 1, 2, 3 우선순위를 차례로 적용해야함!
생각 흐름 순서는 이러하다.
1. 길이가 M 이상인 단어들을 딕셔너리로 저장
2. 딕셔너리 key는 '단어'이고 등장 횟수를 넣는다.
3. 정렬 : sorted 이용 !
** sorted (sort도 가능!)
일괄적으로 내림차순과 오름차순이 결정되지만, 각각 다르게 줄 수도 있다 !!!!
기준으로 주는 값 앞에 마이너스(-)를 붙여주면 해결이다. → 마이너스를 붙여준 해당 그 기준만 내림차순으로 정렬 할 수 있음
sorted (key= lambda x: (-기준1, 기준2, 기준3))
내 코드
import sys
input = sys.stdin.readline
N, M = map(int, input().rstrip().split()) # 단어 개수, 단어 길이
words = {}
for _ in range(N):
word = input().rstrip()
if len(word) < M: # 단어가 M 미만인 경우 패스
continue
else: # 단어가 M 이상인 경우
if word in words: # 단어가 존재한다면
words[word] += 1
else: # 단어가 없는 경우
words[word] = 1
sorted_words = sorted(words.items(), key=lambda x: (-x[1], -len(x[0]), x[0]))
for word, count in sorted_words:
print(word)
728x90
반응형
'Algorithm > 코딩테스트 (Python)' 카테고리의 다른 글
[백준][4659번] 비밀번호 발음하기 (0) | 2023.12.28 |
---|---|
[백준][10431번] 줄세우기 (1) | 2023.12.26 |
[백준][12865번] 평범한 배낭 (1) | 2023.12.23 |
[백준][11404번] 플로이드 (2) | 2023.12.21 |
[프로그래머스][DP] N으로 표현 (1) | 2023.12.17 |
댓글