문제
주어진 수를 오름차순으로 정렬하기(2751번도 같은 문제인데 버블/선택/삽입으로는 시간초과 뜬다)
풀이
정렬 알고리즘과 관련된 이론적인 설명은 아래를 참고할 것.
위 글에서 다섯가지 대표적인 정렬 알고리즘을 봤는데, 문제가 하나 있었다. ‘버블 알고리즘은 배열의 길이가 커질수록 시간복잡도가 무지막지하게 증가한다’는 것. 근데 시간제한이 1초여… 그래서 선택 알고리즘으로 했다.
import sys
N = int(sys.stdin.readline())
array = []
for i in range(N):
i = int(sys.stdin.readline())
array.append(i)
입력은 들어오는 만큼 받아서 리스트에 넣으면 된다.
import sys
N = int(sys.stdin.readline())
array_in = []
for i in range(N):
i = int(sys.stdin.readline())
array_in.append(i)
def selection_sort(array):
n = len(array)
for i in range(n):
min_index = i
for j in range(i + 1, n):
if array[j] < array[min_index]:
min_index = j
array[i], array[min_index] = array[min_index], array[i]
return array
array_out = selection_sort(array_in)
for i in array_out:
print(i)
선택 정렬을 함수로 정의하고 돌려서 출력을 하면 되는’데’… 출력이 한줄에 하나씩 나와야 하잖음? 그래서 배열을 통으로 출력하면 안되고 for문으로 출력해야 한다.
2751번도 같은 문제인데, 버블/선택/삽입 정렬로 하면 시간초과 뜬다. 병합이나 퀵을 쓰자.
Reply