백준 알고리즘
백준 24060 파이썬
KokoaJelly
2023. 2. 4. 03:25
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
import sys
input = sys.stdin.readline
def merge_sort(num_list):
if len(num_list) == 1:
return num_list
mid = len(num_list) + 1 // 2
left = num_list[:mid]
right = num_list[mid:]
left = merge_sort(left)
right = merge_sort(right)
return merge(left, right)
def merge(left, right):
i,j = 0, 0
sorted_list = []
while i < len(left) and j < len(right):
if left[i] < right[j]:
sorted_list.append(left[i])
count.append(left[i])
i += 1
else:
sorted_list.append(right[j])
count.append(right[j])
j += 1
while i < len(left):
sorted_list.append(left[i])
count.append(left[i])
i += 1
while j < len(right):
sorted_list.append(right[j])
count.append(right[j])
j += 1
return sorted_list
n, k = map(int,input().split())
num_list = [int(x) for x in input().split()]
count = []
merge_sort(num_list)
if len(count) >= k:
print(count[k-1])
else:
print(-1)
생각보다 까다로운 문제다. 병합정렬은 나중에 다시 다루도록 하겠다.
기본적인 병합정렬에서, 빈 리스트에 저장되는 문자를 전부 넣어주면 된다.