문제

수 N개 A1, A2, ..., AN이 주어진다. 
A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 N(1 ≤ N ≤ 5,000,000)과 K (1 ≤ K ≤ N)이 주어진다.

둘째에는 A1, A2, ..., AN이 주어진다. (-109 ≤ Ai ≤ 109)

 

출력

A를 정렬했을 때, 앞에서부터 K번째 있는 수를 출력한다.

 

정답

N, K = (map(int,input().split()))
A = list(map(int,input().split()))

def solution(N, K, A):
    answer = 0
    quicksort(0, N-1, K-1)
    answer = A[K-1]
    return answer

def quicksort(S, E, K):
    global A
    if (S < E):
        pivot = partition(S, E)
        if (pivot < K):
            quicksort(pivot+1, E, K)
        elif (K < pivot):
            quicksort(S, pivot-1,  K)
        else:
            return


def partition(S, E):
    global A

    if(S+1 == E):
        if A[S] > A[E]:
            swap(S, E)
        return E

    pivot = (S + E)//2
    swap(S, pivot)
    pivot = S
    i = S + 1
    j = E
    while(i <= j):
        while A[pivot]> A[i] and i<len(A)-1:
            i += 1
        while(A[pivot] < A[j] and j>0):
            j -= 1
        if i <= j:
            swap(i, j)
            i += 1
            j -= 1
    temp = A[pivot]
    A[S] = A[j]
    A[j] = temp
    return j



def swap(a,b):
    global A
    A[a], A[b] = A[b], A[a]


print(solution(N, K, A))

'Coding_Test > Python Code Review' 카테고리의 다른 글

[백준-1517] 버블 소트  (0) 2023.11.02
[백준-2751] 수 정렬하기2  (0) 2023.11.02
[백준-11399] ATM  (1) 2023.11.01
[백준-1427] 소트인사이드  (0) 2023.11.01
[백준-1377] 버블 소트  (1) 2023.10.31