코딩테스트

[Python] 백준 1181번 : 단어정렬 풀이

CuckooBird 2023. 1. 4. 23:43

문제

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

입력

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.


출력

조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.


코드

import sys
N = int(sys.stdin.readline().strip())
str_dic = {}
str_key = ''
for i in range(N):
    str_key = sys.stdin.readline().strip()
    str_dic[str_key] = len(str_key)
str_dic = dict(sorted(str_dic.items()))
str_dic = dict(sorted(str_dic.items(),key=lambda x:x[1]))
for key in str_dic:
    print('{}'.format(key))

str_dic 딕셔너리는 key값을 문자열 형태로 입력받고, 문자열의 길이를 value값으로 합니다.

str_dic = dict(sorted(str_dic.items()))

str_dic의 key값을 기준으로 정렬합니다. 문자열의 알파벳 순으로 정렬이 됩니다.

str_dic = dict(sorted(str_dic.items(),key=lambda x:x[1]))

str_dic의 value값을 기준으로 정렬합니다. 문자열의 길이 순으로 정렬이 됩니다.


후기

파이썬이 너무 좋은 언어라 정렬 문제는 파이썬 문법만 잘 다루면 풀 수 있을 것 같습니다. 물론 저는 구글링 여러번 하긴 했습니다..ㅋㅋ 딕셔너리 관련해서 많이 찾아봤습니다. 지금은 머리가 아파서 정리 못 할 것 같고 다음에 기회가 된다면 하겠습니다.

내일은 학교에서 진행하는 프로그램에 가야해서 코드 못 올립니다. 전철 안에서 할 수 있으면 하고..?? 못 하면 안 하겠습니다.ㅎㅎ 맨날 하는 기록이 깨져서 약간 아쉽지만 아직 남은 날들이 있으니까 앞으로도 열심히 적겠습니다. ㅎㅎ