문제

 

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

첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단

www.acmicpc.net

코드

import sys
from functools import cmp_to_key

input = sys.stdin.readline

def cmpDic(a,b):
    if(a[1]<b[1]):
        return 1
    elif (a[1]>b[1]):
        return -1
    if(len(a[0])<len(b[0])):
        return 1
    elif(len(a[0])>len(b[0])):
        return -1
    if a>b:
        return 1
    else:
        return -1

N, M= map(int,input().split())
res={}
for i in range(N):
    a=input().rstrip()
    if(len(a)<M):
        continue
    if(a in res):
        res[a]+=1
    else:
        res[a]=1
res = [(k, v) for k, v in res.items()]

res.sort(key=cmp_to_key(cmpDic))
for i,j in res:
    print(i)

풀이

  • 영단어들을 조건에 맞게 정렬시킨다.
  1. N,M을 입력받는다.
  2. N개의 단어를 받으면서 길이가 M 이상인 단어들만 res에 넣어준다.
    1. res는 딕셔너리를 사용해서 여러번 나온 단어들은 +1씩 해준다.
  3. 입력받은 단어들을 (key, value)의 튜플로 이루어진 리스트로 변환한다.
  4. 변환한 리스트를 조건에 맞게 정렬한다
    1. 자주 나오는 단어일수록 앞에 배치한다.
    2. 해당 단어의 길이가 길수록 앞에 배치한다.
    3. 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다
  5. 정렬한 res를 출력한다.

+ Recent posts