문제풀이/BOJ

[Python] BOJ/백준 1181번 단어 정렬

서채리 2021. 6. 29. 17:17

[문제]

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net



[풀이]

정렬할 때 조건에 글자 길이도 필요하기 때문에 입력 단어를 넣을 때 len을 이용해 글자 길이도 리스트 voca_li에 함께 넣어주었다. 또, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력해야 하기 때문에 set을 이용해 중복 단어를 삭제했다.

 

주 핵심은 이중 리스트 정렬 문제였는데

voca_li = [(2, 'it'), (4, 'wait'), (1, 'i') ······]

의 리스트일 때 voca_li[][0]인 숫자를 기준으로 정렬할 때는

voca_li.sort(key=lambda x: x[0])

voca_li[][1]인 문자열을 기준으로 정렬할 때는

voca_li.sort(key=lambda x: x[1])

첫 번째 인자 기준 오름차순 정렬 후 값이 일치할 때 두 번째 인자를 기준으로 오름차순으로 정렬할 경우

voca_li.sort(key=lambda x: (x[0], x[1]))

 

 

[코드]

if __name__ == '__main__':
    voca_li = []
    for _ in range(int(input())):
        voca = input()
        num = len(voca)
        voca_li.append((num, voca))
    voca_li = list(set(voca_li))

    voca_li.sort(key=lambda x: (x[0], x[1]))

    for voca in voca_li:
        print(voca[1])