https://school.programmers.co.kr/learn/courses/30/lessons/12935
배열에서 가장 작은 수를 제거한다. 비어있다면 -1을 채워 반환.
처음엔 정렬할 생각이 들었는데 순서는 바뀌면 안되어서 그냥 정직하게 탐색하기로 했다.
- 풀이 1
fun solution(arr: IntArray): IntArray {
var mn = 0x7fffffff
var id = 0
for (i in 0 until arr.size) {
if (arr[i] < mn) {
mn = arr[i]
id = i
}
}
return arr.sliceArray(0 until id) + arr.sliceArray(id + 1 until arr.size) }
제거한 원소 앞뒤로 배열을 슬라이싱해서 합쳐줬다.
(비어있으면 -1 채우는 부분을 안해서 틀림)
- 풀이 2
fun solution(arr: IntArray): IntArray {
var mn = 0x7fffffff
var id = 0
for (i in 0 until arr.size) {
if (arr[i] < mn) {
mn = arr[i]
id = i
}
}
val answer = arr.copyOfRange(0, id) + arr.copyOfRange(id + 1, arr.size)
if (answer.size == 0) return IntArray(1) { -1 }
return answer }
sliceArray는 내부적으로 copyOfRange를 호출하는 것을 보고 이를 직접 호출함.
- 풀이 3
fun solution(arr: IntArray): IntArray {
if (arr.size == 1) return intArrayOf(-1)
var mn = 0x7fffffff
var mnid = 0
arr.forEachIndexed { i, v ->
if (v < mn) {
mn = v; mnid = i
}
}
return arr.copyOfRange(0, mnid) + arr.copyOfRange(mnid + 1, arr.size) }
forEachIndexed로 인덱스와 값을 함께 받아옴.
비어있는지 확인하는 대신 처음에 사이즈 1이면 바로 반환.
- 풀이 4
fun solution(arr: IntArray): IntArray =
if (arr.size == 1) intArrayOf(-1) else run {
var mn = 0x7fffffff; var mnid = 0
arr.forEachIndexed { i, v -> if (v < mn) { mn = v; mnid = i } }
arr.copyOfRange(0, mnid) + arr.copyOfRange(mnid + 1, arr.size) }
run블록 적용, 표현식 함수.