2751: 수 정렬하기 2
문제의 의도
수를 정렬하는 정렬 알고리즘을 구현하는 문제이다. 단, n이 최대 1,000,000의 큰 값을 가질 수 있으므로 시간 복잡도가 $O(n\log{n})$ 정도의 빠른 정렬 알고리즘이어야 한다.
아이디어
또한 이 문제의 난이도가 실버 5로 낮은 편이므로, 정렬의 개념을 이해하고 정렬 알고리즘을 사용할 수 있는 수준이면 풀 수 있다고 이해하였다. 물론 직접 구현을 하는 것이 조금 더 문제를 정확하게 푸는 방법이나 정렬 알고리즘은 생각보다 그 방법이 방대하며 복잡하다.
따라서 이 문제는 파이썬의 내부 정렬 알고리즘을 사용하는 것으로 해결할 수 있다.
정렬과 같이 비용을 많이 사용하는 알고리즘의 경우 input()과 print() 때문에 문제가 생길 수 있다. 이를 내장 sys 라이브러리를 사용하여 해결할 수 있다.
풀이
먼저 몇 개의 숫자를 받을 것인지 입력을 받고, 입력받은 값을 n에 저장한다.
n번만큼 입력을 받고, 입력받은 수를 list에 추가한다.
sorted()
함수를 이용하여 정렬된 리스트의 요소를 for…in 문으로 하나씩 조회하여 출력한다.성공 (메모리 84924 KB, 시간 1164 ms)
직접 구현의 경우
직접 구현의 경우 알고리즘의 세부적인 이해까지는 시간이 부족하여 수도코드를 기반으로 하여 구현하였다.
퀵 소트: 최악 시간복잡도 $O(n^{2})$, 메모리 초과
힙 소트: 최악 시간복잡도 $O(n\log{n})$
, 성공 (메모리 79064 KB, 시간 6892 ms)
버블 정렬: 최악 시간복잡도 $O(n^{2})$, 시간 초과
Last updated