알고리즘 CODEKATA 29 (제일 작은 수 제거하기)

오리너구리·2024년 6월 5일
0

CODEKATA

목록 보기
28/57
post-thumbnail

문제 설명

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

제한 조건

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

내 풀이

최종 답안 코드

class Solution {
    fun solution(arr: IntArray): IntArray {
        var answer = intArrayOf()
        
        var minNum = arr.minOrNull()
                
        var numArr = arr.filter{it != minNum}.toIntArray()
        
        
        
        if(numArr.isEmpty()){
            return intArrayOf(-1)
        }else{
            return numArr
        }
        
    
    }
}

풀이 과정

class Solution {
    fun solution(arr: IntArray): IntArray {
        var answer = intArrayOf()
        
        var minNum = arr.minOrNull()
                
        var numArr = arr.filter{it != minNum}.sorted().reversed().toIntArray()
        
        println(numArr.contentToString())
        
        return answer
    }
}

일단은 이런식으로 하려고했는데,

arr 의 최소값을 구하고, numArr에 그 값을 제외하고 정렬을 시켜준다음 다시 IntArray로 변환함

이제 여기서 만약에 최소값 삭제하고 빈 배열이면 -1을 리턴하게 만들어줘야함

class Solution {
    fun solution(arr: IntArray): IntArray {
        var answer = intArrayOf()
        
        var minNum = arr.minOrNull()
                
        var numArr = arr.filter{it != minNum}.sorted().reversed().toIntArray()
        
        
        
        if(numArr.isEmpty()){
            return intArrayOf(-1)
        }else{
            return numArr
        }
        
    
    }
}

이렇게 만들었는데 테스트는 통과하는데 채점돌리면 다 틀림

class Solution {
    fun solution(arr: IntArray): IntArray {
        var answer = intArrayOf()
        
        var minNum = arr.minOrNull()
                
        var numArr = arr.filter{it != minNum}.toIntArray()
        
        
        
        if(numArr.isEmpty()){
            return intArrayOf(-1)
        }else{
            return numArr
        }
        
    
    }
}

왜 틀렸지하고 문제 다시 봤는데 내가 정렬을 해서 그렇다.

테스트 케이스에서는 운 좋게 정렬 되어있는 배열이 테스트케이스로 설정 되어있어서 맞게 나온거였다. 정렬 삭제해주니까 통과함


다른 사람 풀이

class Solution {
    fun solution(arr: IntArray): IntArray {
        if(arr.size == 1)
            return intArrayOf(-1)
        val answer = arr.toMutableList()
        answer.remove(answer.min()!!)
        return  answer.toIntArray()
    }
}

arr size 가 1면 어차피 삭제하고나면 빈 배열 되니까 처음에 size가 1인 배열이면 -1반환하게하고,

최소값을 삭제해준듯.

class Solution {
  fun solution(arr: IntArray): IntArray {
    val result = arr.toCollection(ArrayList())

    result.removeAt(arr.indexOf(arr.min()!!))

    if (result.isEmpty()) {
      result.add(-1)
    }

    return result.toIntArray()
  }
}

알게 된 것

  1. minOrNull() 사용하면 최소값 구할 수 있다.

쓸모없이 개오래걸렸네 정렬을 안해야되는데 정렬을 해버려가지고는

profile
오리너구리입니다

0개의 댓글