여름의 서재

[SWEA] 5205_퀵 정렬 본문

알고리즘/SWEA

[SWEA] 5205_퀵 정렬

엉아_ 2021. 10. 7. 11:25
728x90

📕 문제

https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

💡 풀이법

: 일반적인 퀵정렬 코드 중 최대한 append와 재귀가 깊게 들어가지 않는 코드를 짜야 통과가 됐다.

 

def quick_sort(arr, start, end):
    if start >= end:
        return
    pivot = start
    left = start + 1
    right = end

    while left <= right:
        while left <= end and arr[left] <= arr[pivot]:
            left += 1
        while right > start and arr[right] >= arr[pivot]:
            right -= 1
        if left > right:
            arr[right], arr[pivot] = arr[pivot], arr[right]
        else:
            arr[left], arr[right] = arr[right], arr[left]

    quick_sort(arr, start, right - 1)
    quick_sort(arr, right + 1, end)

T = int(input())
for tc in range(1, T+1):
    N = int(input())
    nums = list(map(int, input().split()))
    quick_sort(nums, 0, N-1)
    print('#{} {}'.format(tc, nums[N//2]))

 

# 제일 간단한 퀵 정렬 코드 (-> append가 많고 재귀가 깊어 시간초과와 런타임에러가 났다.)

def quick_sort(arr):
    if len(arr) <= 1:
        return arr

    pivot = arr[len(arr) // 2]
    less = []
    equal = []
    more = []

    for num in arr:
        if num < pivot:
            less.append(num)
        elif num == pivot:
            equal.append(num)
        else:
            more.append(num)

    return quick_sort(less) + equal + quick_sort(more)

'알고리즘 > SWEA' 카테고리의 다른 글

[SWEA] 5208_전기버스2 (백트랙킹 이용)  (0) 2021.10.07
[SWEA] 5207_이진 탐색  (0) 2021.10.07
[SWEA] 5205_병합 정렬  (0) 2021.10.07
5203_베이비진 게임  (2) 2021.10.05
[SWEA] 5201_컨테이너 운반  (0) 2021.10.05
Comments