감자튀김 공장🍟

[백준/1181] 단어 정렬 (with 파이썬) 본문

Algorithm/BOJ

[백준/1181] 단어 정렬 (with 파이썬)

Potato potage 2022. 11. 16. 01:02
반응형

✔ 문제


풀이

😂 나의 정답 코드 (1540ms)

import sys
input = sys.stdin.readline

n = int(input())
s = []
s_len = []

for i in range(n):
    x = input().rstrip()
    if x in s:
        continue
    s.append(x)
    s_len.append([x, len(x)])

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

for i in s_len:
    print(i[0])

굳이 s의 길이만 저장한 리스트를 따로 만들고 그걸 또 lambda로 정렬했다 sys를 쓰면 뭐합니까,, 느린걸요..?

1540ms 나온거 보고 진짜 눈이 튀어나올 뻔

 

 

 

😉 다른 정답 코드 (208ms)

n = int(input())
sort_list = []

for _ in range(n):
    s = input()
    sort_list.append(s)

sort_list = list(set(sort_list))
sort_list.sort()
sort_list.sort(key=len)

for x in sort_list:
    print(x)

✔ 설명

그냥 sort_list에 입력값을 저장한 후 이를 set -> list 과정을 통해 중복을 제거한 list로 다시 바꿔준다.

후에 알파벳 순서로 정렬을 위해 .sort()를 사용하고, 이를 키값에 길이를 줘서 정렬하면 된다.

 

먼저 키 값에 길이를 주고, 정렬을 하게 되면 최종 결과가 길이로 정렬된 것이 아니라 알파벳 순으로 정렬이 되어 출력된다.

 

즉, .sort()를 먼저 사용하는 이유는 먼저 sort()에서 input() 값이 같은 길이일 경우 사전순으로 정렬되어야하기 때문이다. 후에 .sort(key=len)을 하게되면 이미 같은 길이는 사전순으로 정렬되어 있는 리스트를 길이가 오름차순으로 되도록 정렬한다.

 

반응형
Comments