출처
https://programmers.co.kr/learn/courses/30/lessons/12935
문제
정수를 저장한 배열, arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를 들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴하고, [10] 면 [-1]을 리턴합니다.
제한 조건
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr [i] ≠ arr [j]입니다.
풀이
문제에 알맞은 배열을 반환하기 위해서는 먼저 주어진 정수 배열에서 가장 작은 수를 제거해야 합니다.
작은 수를 찾는 가장 쉬운 방법은 Math.min 메서드를 이용하는 방법입니다.
하지만 Math.min 메서드는 (2, 3, 4)와 같은 형식, 즉 배열을 받지를 못하므로 배열을 풀어줘야 합니다.
배열을 푸는 가장 쉬운 방법은... (Spread 연산자)를 사용하는 것입니다.
이제 Math.min 메서드를 이용해 배열에서 가장 작은 수를 구해주고, indexOf 메서드를 통해 가장 작은 수가 위치해 있는 Index를 얻어줍니다. 그 후 splice 메서드를 이용해 배열에서 해당 Index 부분만 제거해줍니다.
작은 값을 추출 후, 배열에 값이 없다면 (length 길이가 0일 때) -1을 담은 배열을 대신 반환해줍니다.
코드
function solution(arr) {
arr.splice(arr.indexOf(Math.min(...arr)), 1);
return arr.length ? arr : [-1];
}
indexOf에 대해