Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 코테자바
- 뷰바인딩
- ModelViewPresenter
- javaCoding
- 코테
- 코딩테스트 자바
- programmers
- 코딩테스트 JAVA
- 오블완
- viewpager2
- 백준
- 자바 코딩테스트
- JavaCodingTest
- 코틀린
- pattern
- 티스토리챌린지
- Coding-Test
- kotlin
- CodingTest
- baekjoon
- CodingTestJava
- 코딩테스트
- 산타 환급반
- ScreenSize
- BottomNavigation
- 화면 크기 구하기
- 자바
- Java
- 안드로이드
- Android
Archives
- Today
- Total
KDLiam
Baekjoon(Kotlin) - 24060. 알고리즘 수업 - 병합 정렬 1 (X) 본문
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)
}
나는 이 풀이가 맞다고 생각하는데, 정답은 틀렸다고 나온다.
* 혹시 해당 문제의 오류를 찾으셨다면 댓글이나 메일로 알려주시면 감사하겠습니다 ㅠ.ㅠ
'Problems(Kotlin) > Baekjoon' 카테고리의 다른 글
| 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 |