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
반응형