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
'Problem Solving' 카테고리의 다른 글
[백준] 10828 스택 python 알고리즘 문제 (0) | 2022.04.24 |
---|---|
[백준] 1436 영화감독 숌 python 알고리즘 문제 (0) | 2022.04.24 |
[백준] 10814 나이순 정렬 python 알고리즘 (0) | 2022.04.24 |
[백준] 1018 체스판 다시 칠하기 python 알고리즘 문제 (0) | 2022.04.22 |
[백준] 7568 덩치 python 알고리즘 문제 (0) | 2022.04.20 |
댓글