홍시홍의 프로그래밍

[백준 2751] 수 정렬하기 2 with 파이썬 본문

파이썬

[백준 2751] 수 정렬하기 2 with 파이썬

홍시홍 2020. 9. 15. 00:08

요구사항

수의 개수가 1 ≤ N ≤ 1,000,000개 일 때, 정렬하기

 

참고

퀵 정렬 구현하여 문제 풀이를 진행하였다.

퀵 정렬은 피벗을 기준으로 왼쪽에는 작은 값 오른족에는 큰 값을 오게 만들어 재귀를 통해 정렬하는 것이다

 

풀이

import sys 
arr=[]
n=int(input())
for i in range(n):
    arr.append(int(sys.stdin.readline().rstrip()))
def QuickSort(left, right, arr):
    #left 가 클 경우 종료
    if(left>=right):
        return
    i = left
    j = right
    pivot = arr[(left+right)//2]
    #i, j가 교차 하면 종료

    while(i<=j):
        #i가 작은 거라면 통과 아니라면 멈춘다 -> 교환해야함
        while(arr[i] <pivot):
            i+=1
        #j가 큰 거라면 통과 아니라면 멈춘다 -> 교환해야함
        while(arr[j] >pivot):
            j-=1
        if(i<=j):
            temp=arr[i]
            arr[i]=arr[j]
            arr[j]=temp
            i+=1
            j-=1
        
    QuickSort(left,j,arr)
    QuickSort(i,right,arr)


QuickSort(0, n - 1, arr)
for i in range(n):
    print(arr[i])

풀이(파이썬 스럽게)

import sys 
arr=[]
n=int(input())
#한 줄에 1개 있는 int값 입력 받고
arr= [int(sys.stdin.readline()) for i in range(n)]
#리스트를 정렬한 것을 int->str로 바꾸어 조인으로 char으로 바꾼다
sys.stdout.write("\n".join(map(str, sorted(arr))))
Comments