정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다
일단 사용자로부터 배열을 입력받아야 한다
10 12 5 14 15 이런식으로 ' ' 띄어쓰기를 기준으로 배열을 구분해서 입력받게 하는 변수가 필요
i ≠ j이면 arr[i] ≠ arr[j] 임으로 중복되는 숫자가 없게하자
sort()를 써 오름차순으로 정리하고 첫번째 숫자를 빼줄까?
그러면 배열을 다시 나열할때 순서가 바껴서 배열이 바뀔것이니
오름차순으로 작은수를 찾을 배열하나 원본 배열하나를 만들고
작은수를 변수에 넣은후 같은값이 있다면 빼는걸로하자
사용자로부터 배열부터 입력받자
fun main() {
println("띄어쓰기를 이용해 배열을 입력하세요 ex)10 29 32 24")
val input = readln()
val arr = input.split(' ')?.map { it.toInt() }?.distinct()?: emptyList()
}
split을 이용해 공백' '을 구분자로 배열을 만들었고 map을 이용해 정수로 받았다
distinct를 써 중복되는 값은 제거하도록 만들었다
?: emptyList는 null이거나 변환에 실패할시 빈 리스트가 할당되게 했다
fun solution(arr: List<Int>): IntArray {
var answer = IntArray(arr.size -1)
var arr2:IntArray = arr.toIntArray()
var i = 0
var j = 0
if (answer.size == 0){
answer = intArrayOf(-1)
}
arr2.sort()
while (i < arr.size){
if (arr[i] == arr2[0]) {
i++
continue
}
answer[j] = arr[i]
i++
j++
}
return answer
}
사용자로부터 입력 받은 리스트의 크기 -1 만큼의 사이즈로 리턴할 리스트를 만들었다
가장 작은 수를 빼면 크기가 1만큼 줄어들것이고 만약 사용자가 수를 하나밖에 입력하지 않았을경우
리스트에 -1을 추가해서 리턴하게 만들었다
입력받은 리스트와 같은 리스트를 새로 만든 후 오름차순을 이용해 가장앞에 최소값이 오게하고
반복문을 통해 입력받은 리스트를 리턴 리스트에 옮기면서 최소값은 옮기지 않게했다
🤔 그런데 만들면서 뭔가 되게 늘어놓아서 과정을 진행하는것 같다는 생각이 들었다
이렇게 만들어도 작동이 되긴한다만 정석적인 방식은 아닌것 같다
내가 생각하지 못하거나 알지못한 문법같은게 있지 않을까?💡min을 이용해 최소값을 구해주고 fiter를 써 반복문없이 return값에 넣어주면되겟다
일단 최소값을 정의 해주자
var min = arr.minOrNull?: return intArray(-1)
사용자가 입력한 리스트의 최소값을 min변수에 넣어주고 입력한 정수가 없으면 -1을 리턴한다
이제 입력한 리스트를 리턴 리스트에 넣을건데 filter를 통해 min은 안넣을거다
var answer = arr.filter { it != min }.toIntArray()
if (answer.isEmpty()) return intArrayOf(-1)
arr리스트에서 answer로 옮기면서 옮기는 객체 it이 min이 아닐때 옮기게 해준다
그리고 입력받은 리스트에 정수가 하나밖에 없어 answer가 비어있을경우 -1을 리턴하게 해주면 끝
package com.example.codekata
fun main() {
println("띄어쓰기를 이용해 배열을 입력하세요 ex)10 29 32 24")
val input = readln()
val arr = input.split(' ')?.map { it.toInt() }?.distinct()?: emptyList()
println("${solution(arr).contentToString()}")
}
fun solution(arr: List<Int>): IntArray {
var min = arr.minOrNull()?: return intArrayOf(-1)
var answer = arr.filter { it != min }.toIntArray()
if (answer.isEmpty()) return intArrayOf(-1)
return answer
})