본문 바로가기
Algorithm

[구현/수학] 백준 1181 단어 정렬 - Python

by jangThang 2022. 2. 1.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1181번: 단어 정렬

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     문자열을 정렬하는 문제입니다. 길이가 짧은 순으로 정렬하되, 길이가 같을 때는 사전 순으로 정렬합니다.

     

    2022.01.19 - [Algorithm] - [Algorithm] 단골 1번 문제, 구현 / 수학

     

    [Algorithm] 단골 1번 문제, 구현 / 수학

    [ Contents ] 1. 구현  단순히 '구현'만 하면 되는 문제 유형입니다. 문제를 이해하고 입력에 맞춰 적절한 출력만 하면 됩니다. 특별한 알고리즘이나 프로그래밍적 기법 없이, 단순 제어문만 사용하

    star7sss.tistory.com

     정렬 기준이 2가지이지만, 순서는 없습니다. '짧은 길이대로 정렬하고 사전 순으로 정렬'한 것과 '사전 순으로 정렬 후 짧은 길이대로 정렬'한 결과는 같습니다.

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    N = int(input())
    wordlist = []
    for i in range(N):
        word = input().rstrip()
        wordlist.append([len(word), word])
    
    wordlist.sort()

     문자열의 길이까지 고려하기 위해서, 2차원 리스트를 이용합니다. 첫 번째 항목에 문자열의 길이를 저장하고, 두 번째 항목에 문자열을 저장합니다.

     이후, sort() 함수를 사용하면 자동으로 1, 2항목 기준으로 오름차순 정렬이 됩니다.

     

     

    tmp = ''
    for i in wordlist:
        if tmp == i[1]:
            continue
        tmp = i[1]
        print(i[1])

     중복 제거를 위해, 이전 항목과 비교합니다. 똑같으면 출력하지 않고 넘어갑니다.

     

     

     

     cf) 람다식을 이용한 sort 정렬을 하면 이차원 리스트 없이 정렬할 수 있습니다.

    wordlist.sort(key=lambda x:len(x)): key 파라미터는 정렬 기준이며, len(x)에 따라 정렬됩니다.

     

     cf) 집합 set을 활용하면 중복 항목을 쉽게 제거할 수 있습니다.

    set(wordlist)

     

     

    반응형

    댓글