문제 설명
- 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요.
- 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요.
- 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 조건
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
입출력 예
arr return
[4,3,2,1] [4,3,2]
[10] [-1]
문제, 제한조건, 입출력예에서 보면 길이가 1인 배열 arr이 입력되면 빈 배열이 리턴될 것이고 그럴 경우엔 [-1]을 반환해야 한다는 것
내림차순하라는 조건은 없다는 것
유념해서 풀어보자 😁
배열 안의 인덱스 값들 중 최소값 / 최대값을 구하는 방법을 알아보자
최대 / 최소라 하면 바로 생각나는 바로 그것 !! ☜(゚ヮ゚☜)
Math.min() / Math.max()
하지만 이 함수들을 배열에 바로 갖다 쓰게되면
let arr = [1, 2, 3]
console.log(Math.min(arr))
//NaN 출력
Not a Number가 출력된다.
왜냐하면 Math.min() / Math.max()는 배열이 아닌 고유한 변수를 기대하고 있는데, 배열을 넣으니 이미 첫번째 조건 입력 변수가 고유한 변수가 아니다에서 알고리즘이 끝나버리는 것이다.
그럼 이 배열을 숫자형식으로 바꿀 순 없을까???🤔
let arr = [1, 2, 3]
console.log(Math.min(...arr))
// 1 출력
Math.min(...arr)
= Math.min(1, 2, 3)
이렇게 표현할 수 있다.
이 구문은 ES6 / ES2016의 destructing 할당 구문이라고 한다
destructing 할당 구문은 배열 또는 개체에서 데이터를 추출하여 별도의 변수로 만들 수 있는 JavaScript 식이다. ( ̄︶ ̄)↗
그럼 문제를 풀어보자 😀
function solution(arr) {
const min = Math.min(...arr)
arr.splice(arr.indexOf(min), 1)
return arr.length < 1 ? [-1] : arr
}