백준 1181번 단어 정렬 파이썬 풀이

반응형
    728x90
    반응형

    문제

    초안

    n = int(input())
    word_list = []
    for i in range(n):
        word = input()
        word_list.append(word)
        
    word_list = sorted(word_list)
    
    key_list = []
    values_list = []
    for i in range(len(word_list)):
        key = word_list[i]
        values = len(word_list[i])
        key_list.append(key)
        values_list.append(values)
        
    dict1 = dict(zip(key_list, values_list))
    sorted_by_values = dict(sorted(dict1.items(), key=lambda item: item[1]))
    
    dict_key_list = sorted_by_values.keys()
    for j in b:
        print(j)

    처음엔 문제가 요구하는 것을 구현 하는 목적으로 코드를 작성 하였다.

    반복 횟수 n을 입력 받고, 포문을 통해 문자열을 입력 받는다.

    입력 받은 문자역은 리스트로 바꿔준다.

    알파벳 순서로 나열하고, 길이 순서로 나열하면 답이 나온다.

    따라서 키와 벨류 값으로 딕셔너리를 만들고

    딕셔너리를 값을 기준으로 정렬해준다.

    그리고 포문을 통해 문자열을 출혁해주면 된다.

    그런데 백준에 제출해 보니 런타임 오류가 났다. 

    그래서 간단하게 줄여보았다.

    최종 답안

    # 입력 받기
    n = int(input())
    word_list = [input() for _ in range(n)]
    
    # 단어 리스트 정렬
    word_list.sort()
    
    # 단어 길이를 저장한 딕셔너리 생성 및 값으로 정렬
    sorted_by_values = dict(sorted({word: len(word) for word in word_list}.items(), key=lambda item: item[1]))
    
    # 정렬된 딕셔너리의 키를 출력
    for key in sorted_by_values.keys():
        print(key)

    리스트 컴프리헨션과 람다함수 그리고 포문을 사용해서 간단하게 줄였다.

    728x90
    반응형

    댓글

    Designed by JB FACTORY