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;
}
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()를 써버렸다... 주의하자!
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로 해줘야 요소가 삭제 된 배열을 가져올 수 있다.