Loading [MathJax]/jax/output/CommonHTML/jax.js

새소식

⌨️ Algorithms/백준

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

2023. 3. 8. 21:16

  • -

https://www.acmicpc.net/problem/20920

 

20920번: 영단어 암기는 괴로워

첫째 줄에는 영어 지문에 나오는 단어의 개수 N과 외울 단어의 길이 기준이 되는 M이 공백으로 구분되어 주어진다. (1N100000, 1M10) 둘째 줄부터 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

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

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