여름의 서재
[SWEA] 5205_퀵 정렬 본문
728x90
📕 문제
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
💡 풀이법
: 일반적인 퀵정렬 코드 중 최대한 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