:ledger: 문제 설명

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

:one: 제한사항

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

:two: 입출력 예

arr return
[4,3,2,1] [4,3,2]
[10] [-1]

:ledger: 문제 풀이

const solution = arr => {
    if(arr.length <= 1) return [-1];
    let deleteNum =  arr.reduce((a,b) => a < b ? a : b);
    let idx = arr.indexOf(deleteNum);
    arr.splice(idx, 1);
    return arr;
}

:one: 함수 선언

  • 화살표 함수를 사용하여 arr를 매개변수로 받는다.

:two: 풀이

  • 빈 배열일 경우와 값이 [10]일 경우 즉 arr.length가 1과 같거나 작을 때 -1을 리턴하기 위해 if문을 사용하여 작성했다.
  • 이후 제일 작은 수를 제거하기 위해 reduce메서드를 사용하여 매개변수로 전달받은 배열 중 가장 작은 값을 찾았다.
  • indexOf로 매개변수로 전달받은 배열 중 가장 작은 값을 idx변수에 할당함.
  • 매개변수로 전달받은 배열 arr을 splice를 사용하여 제거해주었다.

:three: 결과 반환

  • numbers = [4,3,2,1] 대입하면 가장 작은 수 1을 제거한 [4,3,2]를 리턴함
  • numbers = 10] 대입하면 if(arr.length <= 1) return [-1]; 으로 -1을 리턴함

:four: 실행

  • solution([4,3,2,1]) 실행하면 [4,3,2] 출력
  • solution([10]) 실행하면 [-1] 출력

:fire: 다른 사람의 풀이 참고

문제를 풀어가면서 아직 어렵지만 조금씩 문제에 대해 이해가 되고 있는 것 같다. 그러나 다른 사람의 풀이를 보면 아.. 나도 저 함수 아는데 왜 나는 생각을 못했지? 하는 부분이 아직까진 많은 것 같다. 처음 매개변수로 받은 arr을 splice를 사용하여 그 함수 안에서 Math.min함수와 spread 함수를 사용하여 문제 풀이한 코드가 있는데 내가 너무 문제를 어렵게 푼 것 같아 아쉽지만 다른 사람의 풀이를 참고하며 배운다고 생각하고 마무리해본다.

// [176명] splice, indexOf, Math.min, spread를 사용한 풀이 과정
function solution(arr) {
    arr.splice(arr.indexOf(Math.min(...arr)),1);
    if(arr.length<1)return[-1];
    return arr;
}

// [460명] 최소 값을 Math.min, spread로 할당 후 삼항연산자와 filter메서드를 사용한 풀이 과정
function solution(arr) {
    const min = Math.min(...arr);
    return arr.length !== 1 ? arr.filter(i => i !== min) : [-1]
}

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges