상세 컨텐츠

본문 제목

Baekjoon(Kotlin) - 24060. 알고리즘 수업 - 병합 정렬 1 (X)

Problems(Kotlin)/Baekjoon

by KDLiam 2023. 9. 2. 15:11

본문

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)
}

 

 

나는 이  풀이가 맞다고 생각하는데, 정답은 틀렸다고 나온다.

 

 

 

* 혹시 해당 문제의 오류를 찾으셨다면 댓글이나 메일로 알려주시면 감사하겠습니다 ㅠ.ㅠ

관련글 더보기