[백준] #24060 알고리즘 수업 - 병합 정렬 1 python

2022. 12. 28. 01:24

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

 

24060번: 알고리즘 수업 - 병합 정렬 1

첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109)

www.acmicpc.net

📕 설명 📕

병합 정렬을 이용한 재귀를 구현하였다.

🧑🏻‍💻 나의 풀이 🧑🏻‍💻

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

cnt = 0
result = -1
def merge_sort(num_list, p, r):
    if p < r and cnt <= K:
        q = (p + r) // 2
        merge_sort(num_list, p, q)
        merge_sort(num_list, q + 1, r)
        merge(num_list, p, q, r)
def merge(num_list, p, q, r):
    i = p
    j = q + 1
    t = 1
    tmp = []
    global cnt, result
    while i <= q and j <= r:
        if num_list[i] <= num_list[j]:
            tmp.append(num_list[i])
            i += 1
        else:
            tmp.append(num_list[j])
            j += 1
    while i <= q:
        tmp.append(num_list[i])
        i += 1
    while j <= r:
        tmp.append(num_list[j])
        j += 1
    i = p
    t = 0
    while i <= r:
        num_list[i] = tmp[t]
        cnt += 1
        if cnt == K:
            result = num_list[i]
            break
        i += 1
        t += 1

merge_sort(num_list, 0, N-1)
print(result)

 

BELATED ARTICLES

more