첫번째 코드
퀵 정렬을 이해는 했지만, 코드를 구성하는 방법이 생각나지 않아 먼저 책을 참고하여 작성했다.
나중에 풀어볼 문제지만 코드 이해가 어려워 여러번 풀어볼 것 같다.
근데 문제는 이 코드가 로컬에서는 돌아가는데 백준에서는 런타임 에러 (RecursionError)로 돌아가지 않는다는 것이다...
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
A = list(map(int, input().split()))
def quickSort(S, E, K):
global A
if S < E:
pivot = partition(S, E)
if pivot == K:
return
elif K < pivot:
quickSort(S, pivot - 1, K)
else:
quickSort(pivot + 1, E, K)
def swap(i, j):
global A
temp = A[i]
A[i] = A[j]
A[j] = temp
def partition(S, E):
global A
if S + 1 == E:
if A[S] > A[E]:
swap(S, E)
return E
M = (S + E) // 2
swap(S, M)
pivot = A[S]
i = S + 1
j = E
while i <= j:
while pivot < A[j] and j > 0:
j = j - 1
while pivot > A[i] and i < len(A) - 1:
i = i + 1
if i <= j:
swap(i, j)
i = i + 1
j = j - 1
A[S] = A[j]
A[j] = pivot
return j
quickSort(0, n - 1, k - 1)
print(A[k-1])
....해결책..?
'코딩 테스트 > do it! 알고리즘 코딩테스트' 카테고리의 다른 글
021 버블 소트 (0) | 2024.05.07 |
---|---|
020 수 정렬하기 2 (0) | 2024.05.02 |
018 ATM (0) | 2024.04.30 |
017 소트인사이드 (0) | 2024.04.30 |
015 수 정렬하기 (0) | 2024.04.25 |