백준 1181 파이썬, input()은 속도가 느렸다

우주·2023년 9월 20일
0

코딩테스트

목록 보기
3/3
post-thumbnail

✔️ 문제 보기

✅ 제약조건

  1. 길이가 짧은게 우선
  2. 사전순 정렬
  3. 중복 제거

처음 풀이

# 1. 단어의 갯수를 입력받는다
n = int(input())
word_list = []

# 2. 입력한 n 만큼 단어를 입력받는다
for i in range(n):
    word_list.append(input())

# 3. 해당 단어를 아래 조건으로 정렬시킨다
word_list.sort()
tmp = ""
# 4. 알파벳순으로 정렬했으니, 길이가 짧은 걸 앞으로 보내야함
for i in range(0, n-1):
    for j in range(i,n):
        if word_list[i] == word_list[j]:
            word_list.pop(j)

for i in range(0, n-1):
    for j in range(i,n):
        if len(word_list[i]) < len(word_list[j]):
            continue
        if len(word_list[i]) > len(word_list[j]):
            tmp = word_list[i]
            word_list[i] = word_list[j]
            word_list[j] = tmp

우선적으로 첫 시도엔 시간초과도 해보고 틀리기도 했는데 중복제거라는 조건을 고려하지 않았었다.
문제를 잘 읽자

개인적으로 생각해본 건
1. sort를 여러번 사용해서
2. 2중 포문을 두번 돌려서
etc..

중복도 제거하고 나니 대강 답은 나오는데 시간초과의 원인이 무엇인지 이해가 안갔다.

서치하면서 알게된 것은
길이순 정렬이 가능하다는 것

list.sort(key=len)



입력을 더 빠르게

sys.stdin.readline() 으로 input()보다 빠른 입력이 가능하다는 것이었다.
다만 여기서 주의할 사항은 sys.stdin.readline()로 입력받게 될 시 마지막에 '\n'개행문자가 포함되어 rstrip()을 사용해주어야 한다는 것이다.




정답 코드

# 1. 단어의 갯수를 입력받는다
import sys

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

# 2. 입력한 n 만큼 단어를 입력받는다
for i in range(n):
    word_list.append(sys.stdin.readline().rstrip())

word_list = list(set(word_list))
# 3. 해당 단어를 아래 조건으로 정렬시킨다
word_list.sort()
word_list.sort(key=len)

for i in word_list:
    print(i)

오늘도 코테 풀면서 두 개나 알아간다. 늦었지만 빨리 배워나가야지.

refs.

https://velog.io/@yeseolee/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EC%A0%95%EB%A6%ACsys.stdin.readline

profile
개발합니다. 회고합니다.

0개의 댓글