[백준 문제풀이] 2751 - 수 정렬하기 2
https://www.acmicpc.net/problem/2751
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
풀이
2024년 1월 기준으로 정답 비율이 31%여서 그 정도로 어려운 문젠가? 하고 풀었는데 나 역시 틀려버렸다..
틀려버린 이유들은
- 시간 초과 (퀵 정렬인데 시간 초과가 걸려서 input, output을 sys함수를 이용해서 다시 짬)
- 런타임에러(Recursion Error) 재귀함수의 깊이가 너무 깊어지면 생기는 에러라고 하는데, 내가 구현한
QuickSort()
함수가 재귀함수라 생기는 에러인듯했다.
틀린 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import sys
input = sys.stdin.readline
print = sys.stdout.write
N = int(input().rstrip())
arr = []
for _ in range(N):
arr.append(int(input()))
def QuickSort(arr):
if len(arr) <= 1:
return arr
p = arr[int(len(arr) / 2)]
arr1, arr2, arr3 = [], [], []
for num in arr:
if num > p:
arr3.append(num)
elif num < p:
arr1.append(num)
else:
arr2.append(num)
return QuickSort(arr1) + arr2 + QuickSort(arr3)
arr = QuickSort(arr)
for i in range(len(arr)):
print("".join(str(arr[i])) + "\n")
정답 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
input = sys.stdin.readline
print = sys.stdout.write
N = int(input().rstrip())
arr = []
for _ in range(N):
arr.append(int(input()))
arr.sort()
for i in range(len(arr)):
print("".join(str(arr[i])) + "\n")
기본 내장 함수인 sort()
함수로 힘겹게? 통과했다.
기본 내장 함수의 sort()
가 궁금하다면 https://github.com/python/cpython/blob/main/Objects/listobject.c#L2577 를 참고해보자.
댓글남기기