오늘은 오랜만에 문제를 풀어보게 되었는데 사실 이 문제를 풀면서 또 다시 공식 문서의 중요성을 깨닫게 되었다.
문제
사실 굉장히 간단한 문제라고 생각했다.(공식 문서의 중요성은 조금 뒤에 말해보겠다)
일반적인 경우, 전달된 배열을 리스트로 바꾸고 최솟값을 제거한 뒤 다시 배열로 만들어 리턴하면 되고,
배열의 길이가 1인 경우 곧바로 -1만 들어있는 배열을 만들어 리턴하면 된다.
풀이
최종 정답을 받은 풀이는 위 사진의 코드이다.
하지만, 이전 코드는 약간 달랐다. 차이점도 있었고, 에러가 났던 부분도 설명해보겠다.
class Solution {
fun solution(arr: IntArray): IntArray {
var answer = intArrayOf()
if (arr.size == 1) answer = intArrayOf(-1)
else answer = arr.filterNot { it == arr.min() }.toIntArray()
return answer
}
}
처음 코드는 이랬다.
먼저 에러가 났던 부분은 arr.min()으로 제일 작은 수를 찾는 과정이었다.
min()이 unresolved reference라며 에러가 났다.
나는 '코틀린 배열 최소값'을 검색했더니 배열에 min()메소드를 사용하면 된다고 해서 했는데 이런 일이 발생한 것이다.
그래서 공식 문서 사이트인 https://kotlinlang.org/ 에서 intarray를 검색한 뒤 메소드가 존재하는지 찾아보았다.
그랬더니 최신 버전의 코틀린에서는 존재하지 않았다. 다른 분들이 사용한 코틀린과는 버전이 달랐던 모양이다.
그래서 어떤 메소드를 사용해야할까를 고민하다 결국 찾아낸 메소드가 minOrNull()이었다.
이 문제를 해결하고 나니 테스트 케이스 1번이 시간 초과로 통과되지 않는 문제가 있었다.
정확한 케이스는 모르겠지만 질문목록 중에 파이썬으로 푸신 분들 중에 나와 같은 상황인 분이 계셨다.
답변은 시간 복잡도가 어떻다 하시면서 반복문 실행 전에 최소값을 먼저 구해놓고 반복문을 실행하라고 해주셨다.
그래서 나도 최소값을 먼저 구해놓고 filterNot을 사용해 리턴할 배열을 만들어주었다.
'프로그래머스' 카테고리의 다른 글
짝수는 싫어요 코틀린(Kotlin) (0) | 2022.11.19 |
---|---|
문자열 다루기 기본 코틀린(Kotlin) (0) | 2022.09.28 |
가운데 글자 가져오기 스위프트(Swift) (0) | 2022.09.09 |
나머지가 1이 되는 수 찾기 스위프트(Swift) (0) | 2022.09.05 |
시저 암호 코틀린(Kotlin) (0) | 2022.09.03 |