[프로그래머스 level1] 제일 작은 수 제거하기

김예지·2021년 10월 8일
1

문제

https://programmers.co.kr/learn/courses/30/lessons/12935


문제 풀이

코드

function solution(arr) {
    arr.splice(arr.indexOf(Math.min(...arr)), 1);
    if(arr.length===0) arr.push(-1);
    return arr;
}

실패 코드1

function solution(arr) {
    arr = arr.sort((a, b) => b-a);
    arr.pop(); //가장 작은 수 제거 
    
    if(arr.length===0) arr.push(-1);
    return arr;
}

왜 실패? 테스트 16개 다 실패다. 코드실행했을 때는 테스트 통과라고 뜨는데, 제출만 하면 16개 전부 실패... 뭐가 문제지?
결론은, sort()를 했던게 문제였다. 입출력을 할 때, 배열의 원본 순서를 지켜야하는데 sort()를 했기 때문에 원본 배열 순서가 망가져서 생긴 이유였다.
입출력 예에서 너무 예쁘게 정렬되어있어서, 아무생각없이 나도 sort()를 써버렸다... 주의하자!

실패 코드2

function solution(arr) {
    if(arr.length===1) return [-1];
    arr.splice(arr.indexOf(Math.min(arr)), 1);
    return arr;
}

이렇게 했는데, 계속 실패로 떠서 멘붕왔다...
문제는 Math.min(arr)로 쓴것이다! Math.min(배열)형태로 작성하면 안된다. 반드시 Math.min(value1, 2, 3...)형태로 적어줘야하기 때문에 전개연산자를 통해 Math.min(...arr)와 같은 형태로 작성해줘야한다.
만약 뭔가 안된다면 메소드 형태를 제대로 썼는지 확인해보자! 너무 쉬운것같은 문제를 틀려서 순간 현타왔지만, 이런 사소한 실수로도 배워나간다.

+보너스
return arr.splice()형태로 작성하면 '삭제된 요소'를 리턴한다. 반드시 arr.splice()해준 후에 return arr로 해줘야 요소가 삭제 된 배열을 가져올 수 있다.

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

0개의 댓글