본문 바로가기
Problem Solving

[백준] 1181 단어 정렬 python 알고리즘 문제

by DuncanKim 2022. 4. 24.
728x90

문제 1181. 단어 정렬

1. 나의 코드와 발상 과정

n = int(input())

word_list = []

for i in range(n):
    word_list.append(str(input()))

word_list = list(set(word_list)) ## attribute error
word_list.sort()
word_list.sort(key = lambda x : len(x))

for word in word_list:
    print(word)

잘 돌아가는 코드이다. 

 

word_list를 만들어서 그 안에 입력값들을 저장하고, set() 즉, 집합을 활용해서 중복 원소들을 털어내버리고,

sort()로 알파벳 순 정렬을 한 다음에, 문자열 길이를 기준으로 해서 또 정렬을 해준다.

 

그런 다음 프린트를 하는 간단한 구조이다.

 

중간에 AttributeError를 만날 수 있었는데, 제출 할 때, 8번 라인에서 set(word_list)로만 써놓아, sort()를 할 때, word_list가 집합으로 인식되어 실행되지 않는 모습을 볼 수 있었다.

 

2. 고수님의 깔끔한 코딩

import sys

word = set()
for i in range(int(input())):
    word.add(sys.stdin.readline().rstrip())

word = list(word)
word.sort()
word.sort(key = lambda x: len(x))

print("\n".join(word))

나와 로직의 흐름은 같지만, set으로 먼저 시작하고, sys.stdin.readline()으로 받는 것, 그리고 마지막 프린트에서 반복문을 사용하지 않고, join()을 사용하여 프린트 한 것이 다르다.

이 차이가 속도를 결정하는 것이었다.

 

3. 아쉬운 점

sys.stdin.readline()과 join()과 더 친해질 필요가 있다.

728x90

댓글