-
백준 2751번: 수 정렬하기 2(Python)코딩 테스트 2023. 2. 6. 17:50
수 정렬하기 2
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제 입력 1 복사
5 5 4 3 2 1
예제 출력 1 복사
1 2 3 4 5
코드
import sys n = int(input()) num_list=[] for i in range(n): num_list.append(int(sys.stdin.readline())) num_list.sort() for i in range(n): print(num_list[i])
우선, 이 문제는 전에 풀었던 백준 2750번 문제와 매우 유사하지만, N의 조건에서 최대값이 1,000,000으로 매우 커졌다...!
따라서 그 때의 코드를 그대로 쓴다면 시간 초과가 떠버리는 슬픈 일이 일어난다.
우선 정렬방법은 *파이썬의 내장함수를 사용하였기 때문에 정렬방법 말고 1,000,000개의 수를 입력받는 방법에서 차이를 두어야 한다.
기존의 input()은 인자로 prompt message를 받을 수 있는 기능이 있다. 이 기능은 입력량이 크지 않다면 별 상관 없지만, 입력이 많아진다면 점점 쌓여 prompt message기능이 없는 sys.stdin.readline()과 시간에서 큰 차이가 나게 되는 것이다.
* 파이썬의 정렬 내장함수는 Timsort 알고리즘을 사용한다. Timsort 알고리즘은 Insert sort와 Merge sort를 결합하여 만든 최선 시간복잡도 O(n), 평균과 최악은 O(nlogn)의 시간복잡도를 보여주는 효율적인 알고리즘이기 때문에 개선하기 힘들다.
'코딩 테스트' 카테고리의 다른 글
백준 11729번: 하노이 탑 이동 순서 (0) 2023.02.09 백준 1911번: 흙길 보수하기(Python) (0) 2023.02.08 프로그래머스 개인정보 수집 유효기간(2023 KAKAO BLIND RECRUITMENT) Python (0) 2023.02.07 백준 2750번: 수 정렬하기(Python) (0) 2023.02.06 백준 2798번: 블랙잭(Python) (0) 2023.02.06