새소식

⌨️ Algorithms/백준

[Python] 백준 20920번_영단어 암기는 괴로워

2023. 3. 8. 21:16

  • -

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) 자주 나오는 단어일수록 앞에 배치
    • 2) 해당 단어의 길이가 길수록 앞에 배치
    • 3) 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치
  • M보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가 M이상인 단어들만 외움
  • 영단어 암기를 효율적으로 할 수 있도록 단어장을 만들어 주기
  • 입력
    • 첫째 줄에는 영어 지문에 나오는 단어의 개수 N과 외울 단어의 길이 기준이 되는 M이 공백으로 구분되어 주어짐 (1≤N≤100000, 1≤M≤10)
    • 둘째 줄부터 N+1번째 줄까지 외울 단어를 입력받음. 입력은 알파벳 소문자로만 주어지며 단어의 길이는 10을 넘지 않음
    • 단어장에 단어가 반드시 1개 이상 존재하는 입력만 주어짐
  • 출력
    • 화은이의 단어장에 들어 있는 단어를 단어장의 앞에 위치한 단어부터 한 줄에 한 단어씩 순서대로 출력
  • 시간 제한: 1초
  • 메모리 제한: 1024 MB

 

"""
입출력 예시)

(예제 입력 1) 
7 4
apple
ant
sand
apple
append
sand
sand
        -> sand
           apple
           append

(예제 입력 2)
12 5
appearance
append
attendance
swim
swift
swift
swift
mouse
wallet
mouse
ice
age
        -> swift
           mouse
           appearance
           attendance
           append
           wallet
"""

 

 

## 의사코드 ##

# 길이가 m이상인 단어만 단어장에 저장

# 단어장 -> 딕셔너리 key: 단어, value: [개수, 길이, 단어]

# 1) 자주 나오는 단어일수록 앞에 배치 -> 내림차순 정렬: -x[1][0]
# 2) 단어의 길이가 길수록 앞에 배치 -> 내림차순 정렬: -x[1][1]
# 3) 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치 -> 오름차순 정렬: x[1][2]

 

 

 

 

import sys
input = sys.stdin.readline
n, m = map(int, input().split())

note = {} # 단어장
for _ in range(n):
    word = input().rstrip()
    # 길이가 m이상인 단어만 단어장에 저장
    if len(word) >= m:
        # 해당 단어가 단어장에 존재하면 개수 + 1
        if note.get(word):
            note[word][0] += 1
        # 단어장에 존재하지 않으면 [개수, 길이, 단어] 저장
        else:
            note[word] = [1, len(word), word]

# 자주 나오는 단어일수록, 단어의 길이가 길수록, 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치
sorted_note = sorted(note.items(), key=lambda x: (-x[1][0], -x[1][1], x[1][2]))

for w in sorted_note:
    print(w[0])

 

 

 

  • 딕셔너리.get()
    • 해당 값이 존재하면 값을, 없으면 None 반환

 

  • 정렬 기준이 여러 개일 때, 각각 다르게 오름차순과 내림차순 설정하기
    • 내림차순 할 기준 앞에 마이너스(-) 붙이기
    • int형 기준에만 적용 가능 
# 마이너스가 붙은 기준은 내림차순, 없으면 오름차순 정렬
sorted(딕셔너리.items(), key= lambda x: (-기준1, 기준2, 기준3))

 

 

 

 

 

 

https://velog.io/@hnsoo/%EB%B0%B1%EC%A4%80-20920-%EC%98%81%EB%8B%A8%EC%96%B4-%EC%95%94%EA%B8%B0%EB%8A%94-%EA%B4%B4%EB%A1%9C%EC%9B%8C

 

[백준] 20920: 영단어 암기는 괴로워

문제: https://www.acmicpc.net/problem/20920딕셔너리 자료형과 정렬 그리고 문자열이 관련된 문제이다.특히 딕셔너리의 정렬을 잘 숙지 할 수 있는 문제이다.단어들을 가지고 단어장을 만들 것이다. 길이

velog.io

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!