코드연습/BOJ

BOJ 1181 : 단어 정렬

AI 로밧 2022. 4. 26. 13:03
728x90

문제

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

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

풀이

문제를 보고 딱 든 생각은 'Nested List'응용 문제라고 생각했다. 처음에 시작을 List 내부 List로 구성해서 시간 초과가 발생했었다. 이후 Dictionary 타입을 이용해서 문자를 정렬했는데, 이 역시 풀이에서 2중 For문을 사용하여 시간 초과가 발생했다. 최종적으로 아래 코드와 같이 Key : 문자열 길이 Value : 문자로 구성되는 자료 구조를 택함으로써 시간 내 문제를 풀이하였다.

import sys

if __name__ == '__main__':
    N = int(input())

    data_list = {}
    for _ in range(N):
        literal, w = sys.stdin.readline().split('\n')
        if len(literal) in data_list:
            data_list[len(literal)].append(literal)
        else:
            data_list[len(literal)] = [literal]

    data_list = dict(sorted(data_list.items(), key = lambda item: item[0]))

    for k,v in data_list.items():
        v = sorted(set(v))
        for d in v:
            print(d)