2751번 파이썬 코테 속도 메모리 줄이기 stdin stdout '\n'
2020. 9. 2. 17:30
반응형
이전 글에서 힙소트를 구현해서 2751번을 풀었습니다.
그런데 다른 좋은 풀이들을 찾다보니 힙소트를 구현한 것에 비해 시간이 거의 6~7배 빠르고, 코드 길이도 10배 이상 짧은 코드가 있었습니다.
먼저 정답 코드부터 공유합니다.
import sys
n = int(input())
l = []
for i in range(n):
l.append(int(sys.stdin.readline()))
for i in sorted(l):
sys.stdout.write(str(i)+'\n')
첫 번째 줄 ~ 세 번째 줄까지의 설명 : 먼저 하나하나 설명 드리자면 sys를 import하고, n을 입력받은 뒤 숫자들을 저장할 리스트 l을 선언해줍니다.
*첫 번째 for문 설명
먼저 선언했던 l에 사용자로부터 입력 값을 받은 뒤 append로 리스트 뒤로 넣어줍니다. 그런데 이 때 int(input()으로 넣어주는 것이 아닌 readline()으로 넣어주는데 여러 값들을 입력 받을 때는 이렇게 입력받는 것이 더 빠르다고 하네요.
*두 번째 for문 설명
l을 정렬시켜서, 즉 sorted(l)의 내부를 반복합니다. sorted는 O(nlogn)의 시간 복잡도를 갖기 때문에 2751번에서 요구하는 범위에서 시간 내에 들어올 수 있습니다. sys를 이용해서 출력하며 출력할 때는 write를 사용합니다. 또한 줄을 바꿀 때는 '\n'을 사용하는 것이 가장 시간이 적게 걸리기 때문에 다른 것보다도 '\n'을 사용하는 것을 추천드립니다.
*sys.stdin.readline.rstrip을 사용한다면 끝의 개행문자를 제거할 수 있다.
반응형
'프로그래밍 > 파이썬' 카테고리의 다른 글
파이썬 리스트로 한 줄에 여러 값 입력 받기 (0) | 2020.09.07 |
---|---|
파이썬 람다 lambda, sort key (0) | 2020.09.03 |
백준 2751 주석 설명 / 파이썬 heap sort 힙 소트 구현 (0) | 2020.09.02 |
파이썬 리스트 범위 지정, 슬라이싱 (0) | 2020.08.18 |
파이썬의 강력한 모듈, 라이브러리 itertools (0) | 2020.08.18 |