728x90
조건
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.( arr은 길이 1 이상인 배열입니다. 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.)
알고리즘 예상
- 인덱스 i,j에 관한 조건에서 입력되는 배열은 중복된 원소가 없는 배열임을 알 수 있다.
- arr의 최솟값을 변수에 저장한다.
- 필터를 이용해 answer에 최솟값을 제외한 원소를 넣는다.
- answer가 비어있으면 answer에 -1을 넣는다.
초기 코드
class Solution {
fun solution(arr: IntArray): IntArray {
var answer = intArrayOf()
return answer
}
}
내 코드
class Solution {
fun solution(arr: IntArray): IntArray {
var answer = intArrayOf()
var minVal = arr[0]
for(i in arr){
if(minVal > i) minVal = i
}
answer = arr.filter { it != minVal }.toIntArray()
if(answer.isEmpty()) answer += -1
return answer
}
}
처음에 var minVal = arr.min()을 사용했는데 레퍼런스 오류라며 실행이 되지 않아 for문을 이용한 방법으로 방향을 바꾸었다.
다른 사람의 풀이
class Solution {
fun solution(arr: IntArray): IntArray = if(arr.size == 1) arrayOf(-1).toIntArray()
else arr.filter { it != arr.min() }.toIntArray()
}
개선점 또는 배운점
- min()은 이제 사용이 안되고 minOrNull()이나 min()!!을 이용해 null값에 대한 예외처리를 해야한다고 한다.
- 코드박스를 사용하지 않은 풀이가 꽤나 보였다. 저 방식도 익숙해질 필요가 있다.
- for문을 이용한 방법보다 minOrNull()을 이용한 방법이 2배가까운 시간이 걸렸다.
- 조건문을 사용하는 시점이 answer배열을 저장한 후가 아닌 저장 전에 arr의 길이를 받아 사용하는 편이 좋을 것 같다.
개선된 코드
class Solution {
fun solution(arr: IntArray): IntArray {
var answer = intArrayOf()
if(arr.size == 1) answer += -1
else answer = arr.filter { it != arr.minOrNull() }.toIntArray()
return answer
}
}728x90
'TIL > 알고리즘' 카테고리의 다른 글
| 02/05 알고리즘 공부(31) - 수박수박수박수박수박수? (1) | 2024.02.05 |
|---|---|
| 02/05 알고리즘 공부(30) - 가운데 글자 가져오기 (0) | 2024.02.05 |
| 02/02 알고리즘 공부(28) - 없는 숫자 더하기 (0) | 2024.02.02 |
| 02/02 알고리즘 공부(27) - 핸드폰 번호 가리기 (0) | 2024.02.02 |
| 02/02 알고리즘 공부(26) - 음양 더하기 (1) | 2024.02.02 |