백준

백준 11004번: K번째 수

https://www.acmicpc.net/problem/11004

 

11004번: K번째 수

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

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
n, k = map(int, input().split())
= list(map(int, input().split()))
 
def quicksort(s, e, k):
    global a
    if s < e:
        pivot = partions(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 partions(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-=1
        while pivot > a[i] and i< len(a)-1:
            i +=1
        if i<=j:
            swap(i, j)
            i += 1
            j -= 1
    a[s] = a[j]
    a[j] = pivot
    return j
 
quicksort(0, n-1, k-1)
print(a[k-1])
cs

'백준' 카테고리의 다른 글

백준 1517번: 버블 소트  (0) 2023.02.09
백준 13023번: ABCDE  (0) 2023.02.09
백준 1427번: 소트인사이드  (0) 2023.02.05
백준 1377번: 버블 소트  (0) 2023.02.04
백준 2750번: 수 정렬하기  (1) 2023.02.04