https://www.acmicpc.net/problem/20920
이 문제는 딕셔너리에 대해서 좀더 명확하게 이해할수 있게 만들어준 문제이다.
딕셔너리를 만든후 딕셔너리 구조를
d[key]: [단어개수, 단어길이, 단어] 로 구성한다
1. 정렬
파이썬의 sort및 sorted 함수는 key 인자 값으로 정렬에 있어서 우선 순위 기준을 설정 할 수 있다.
sort(key= lambda x: (기준1, 기준2, 기준3))
여기서 중요한 점이 있는데 정렬 함수는 추가 인자 값으로 reverse=True를 줌으로써 내림차순 정렬을 실행할 수 있다.
sort(key= lambda x: (기준이 될 값), reverse = True)
그러나 다양한 정렬 기준이 있을때 reverse=True를 쓰게 되면 모든 기준들이 일괄적으로 내림차순 정렬이 된다. 그러므로 이러한 문제에서는 사용하지 않아야 한다.
이 문제에서는 기준으로 주는 값에 -를 붙여서 해결 가능하다.
sort(key= lambda x: (-기준1, 기준2, 기준3))
다만 이는 숫자형만 적용 되고 문자형은 적용이 되지 않는다.
문제에서 단어 개수, 단어 길이는 내림차순으로 단어 순서는 오름차순으로 설정하라고 했으므로 개수와 길이 기준 앞에만 마이너스를 붙였다.
import sys
N,M=map(int,input().split())
d=dict()
for _ in range(N):
let=sys.stdin.readline().rstrip()
if len(let)<M:
continue
if let not in d:
d[let]=[1,len(let),let]
else:
d[let][0]+=1
arr=d.values()
values=[*arr]
values.sort(key=lambda x:(-x[0],-x[1],x[2]))
for _,_,let in values:
print(let)
'알고리즘' 카테고리의 다른 글
백준 1541번 - split() 함수의 활용 (0) | 2022.06.23 |
---|---|
연속합 - 백준 1912번 (0) | 2022.06.17 |
분할 정복 예제 ( 괄호를 삽입하는 여러가지 방법) (0) | 2022.05.21 |
분할 정복 (0) | 2022.05.21 |
그리디 알고리즘 예제 (0) | 2022.05.19 |