쥐수의 공부노트
백준 24060번 알고리즘 수업 - 병합 정렬 1 본문
728x90

정답 :
let input = readLine()!.split(separator:" ").map{Int(String($0))!}
let N = input[0]
let K = input[1]
var numArray = readLine()!.split(separator:" ").map{Int(String($0))!}
var count = 0
var answer = -1
func mergeSort(_ array: [Int], _ start: Int, _ end: Int) {
if array.count <= 1 { return }
if start < end && count < K {
let center = (start + end) / 2
mergeSort(array, start, center)
mergeSort(array, center + 1, end)
merge(start, center, end)
}
}
func merge(_ start: Int, _ center: Int, _ end: Int) {
var i = start
var j = center + 1
var t = 0
var temp = [Int]()
while i <= center && j <= end {
if numArray[i] <= numArray[j] {
temp.append(numArray[i])
i += 1
} else {
temp.append(numArray[j])
j += 1
}
}
while i <= center {
temp.append(numArray[i])
i += 1
}
while j <= end {
temp.append(numArray[j])
j += 1
}
i = start
while i <= end {
numArray[i] = temp[t]
count += 1
if count == K {
answer = temp[t]
break
}
i += 1
t += 1
}
}
mergeSort(numArray, 0, N - 1)
print(answer)
더보기
TMI : 문제를 안푼지 오래됐다.. 다시 마음을 잡고 하루 두 문제씩 꾸준하게 시작!
728x90
'swift 알고리즘 > 재귀' 카테고리의 다른 글
백준 11729번 하노이 탑 이동 순서 (0) | 2023.07.11 |
---|---|
백준 4779번 칸토어 집합 (0) | 2023.07.10 |
백준 25501번 재귀의 귀재 (0) | 2023.06.16 |
백준 10870번 피보나치 수 5 (0) | 2023.06.16 |
백준 27433번 팩토리얼 2 (0) | 2023.06.16 |