URL : 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
[ FAILS ]
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.`out`.bufferedWriter()
val (n, k) = br.readLine().split(" ").map { it.toInt() }
val inputArr: IntArray = br.readLine().split(" ").map { it.toInt() }.toIntArray()
val process = mutableListOf<Int>()
mergeSort(inputArr, process)
if (process.size < k) bw.write("-1")
else bw.write("${process[k - 1]}")
br.close()
bw.close()
}
fun merge(left: IntArray, right: IntArray, p: MutableList<Int>): IntArray {
var leftIndex = 0
var rightIndex = 0
val result = IntArray(left.size + right.size)
var resultIndex = 0
while (leftIndex < left.size && rightIndex < right.size) {
if (left[leftIndex] < right[rightIndex]) {
result[resultIndex] = left[leftIndex]
p.add(left[leftIndex])
leftIndex++
} else {
result[resultIndex] = right[rightIndex]
p.add(right[rightIndex])
rightIndex++
}
resultIndex++
}
while (leftIndex < left.size) {
result[resultIndex] = left[leftIndex]
p.add(left[leftIndex])
leftIndex++
resultIndex++
}
while (rightIndex < right.size) {
result[resultIndex] = right[rightIndex]
p.add(right[rightIndex])
rightIndex++
resultIndex++
}
return result
}
fun mergeSort(arr: IntArray, p: MutableList<Int>): IntArray {
if (arr.size <= 1) return arr
val middle = arr.size / 2
val left = arr.copyOfRange(0, middle)
val right = arr.copyOfRange(middle, arr.size)
return merge(mergeSort(left, p), mergeSort(right, p), p)
}
나는 이 풀이가 맞다고 생각하는데, 정답은 틀렸다고 나온다.
* 혹시 해당 문제의 오류를 찾으셨다면 댓글이나 메일로 알려주시면 감사하겠습니다 ㅠ.ㅠ
Baekjoon(Kotlin) - 15649. N과 M (1) (0) | 2023.09.03 |
---|---|
Baekjoon(Kotlin) - 2447. 별 찍기 - 10 (0) | 2023.09.02 |
Baekjoon(Kotlin) - 18258. 큐2 (0) | 2023.09.01 |
Baekjoon(Kotlin) - 4948. 베르트랑 공준 (0) | 2023.09.01 |
Baekjoon(Kotlin) - 14425. 문자열 집합 (0) | 2023.08.31 |