본문 바로가기

알고리즘 테스트

[백준 2751번] 수 정렬하기2 (Python)

출처 https://www.acmicpc.net/problem/2751

 

 

import sys
from typing import List

# 정렬하며 병합하기
def mergeTwoLists(left: List[int], right: List[int]) -> List[int]:
    result = []
    l, r = 0, 0
    while l < len(left) and r < len(right):
        if left[l] <= right[r]:
            result.append(left[l])
            l += 1
        else:
            result.append(right[r])
            r += 1

    if len(left) == l:
        result = result + right[r:]
    elif len(right) == r:
        result = result + left[l:]

    return result

# 반으로 나누기
def sortList(A: List[int]) -> List[int]:
    if len(A) == 1:
        return A

    mid = len(A)//2
    left = sortList(A[:mid])
    right = sortList(A[mid:])

    return mergeTwoLists(left, right)


A = [int(sys.stdin.readline()) for i in range(int(sys.stdin.readline()))]

m = sortList(A)
print(*m, sep='\n')