Algorithm Problems
[백준][Python] 2751번 수 정렬하기2 - MergeSort
WakaraNai
2021. 7. 29. 01:37
728x90
반응형
https://www.acmicpc.net/problem/2751
2751번: 수 정렬하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
Python
import sys
input = sys.stdin.readline
n = int(input())
arr = [int(input()) for _ in range(n)]
def merge(low, mid, high):
i, j = low, mid+1
sort = []
while i <= mid and j <= high:
if arr[i] == arr[j]:
sort.append(arr[i])
sort.append(arr[j])
i, j = i+1, j+1
elif arr[i] < arr[j]:
sort.append(arr[i])
i += 1
elif arr[i] > arr[j]:
sort.append(arr[j])
j += 1
while i <= mid:
sort.append(arr[i])
i += 1
while j <= high:
sort.append(arr[j])
j += 1
arr[low:high+1] = sort
def mergeSort(low, high):
if low < high:
mid = (low+high) // 2
mergeSort(low, mid)
mergeSort(mid+1, high)
return merge(low, mid, high)
mergeSort(0, n-1)
for a in arr:
print(a)
728x90
반응형