배열이 주어지고 배열에서 제일 작은 값을 제거한 배열을 리턴하면 된다.
단 빈배열일땐 [-1] 을 리턴하면 된다.
첫번째 시도로 로직을 이렇게 작성하였다.
function solution(arr) {
let
answer= new Array(...arr)
answer=answer.sort()
if(arr.length ===1){
return [-1]
}
let eleminate = arr.indexOf(answer[0]);
answer = arr.splice(eleminate,1)
return arr;
}
처음 배열을 정렬을 시키고 첫번째 인덱스는 무조건 작은 숫자가 되니
첫번째 인덱스를 제거한 값을 리턴하였다.
그러나 몇몇 의 테스트는 계속 통과하지 못하여서 질문하기의 힌트를 보게되었다.
확인해보니 마음대로 정렬하면 안된다는것.
하지만 새로운 배열에서 정렬시킨후에 작은 숫자를 찾고
그 작은 숫자를 받은 배열에서 인덱스를 찾은다음에 그 인덱스를 제거한 것이라서
원본 배열은 정렬을 안한 상태로 순전히 작은 숫자만 리턴할터인데
왜 안풀리는지 이해가 안되었다.
그래서 다음 풀이로 이런 로직을 작성하였다 .
function solution(arr) {
if(arr.length == 1){
return [-1]
}else{
let newArr = [...arr]
let small = newArr.sort((a,b)=>{return a-b})[0]
let a = arr.filter((x,index)=>{return x>small})
return a
}
}
위의 조건과 같은 방법으로 새로운 배열을 정렬하여서 첫번째 작은 수를 찾은다음에
이번에는 필터로 비교를 하고 리턴을 하는 것
이번에는 통과할수 있었다. 위와 아래의 방식에서 무슨 차이가 있는지 잘모르겠다
위에도 맞는 방법이라고 생각이 드는데 조금 더 고민해봐야겠다.
다른 사람들은 원배열 그대로에서 Math.min을 사용하여서 최소값을 구하였다.
이방법은 생각하지 못하였는데 또하나 배우고 간다.
다른사람의 풀이 로직이다.
function solution(arr) {
arr.splice(arr.indexOf(Math.min(...arr)),1);
if(arr.length<1)return[-1];
return arr;
}
훨씬 간결하게 푼것 같다. 하지만 먼저 if조건으로 -1을 뱉으면 더 효과적일것 같다
다른 사람의 풀이중 아래의 로직을 보았다
const minValue = Math.min.apply(null, arr)
apply함수는 this 를 줄때 필요한것으로 알고 있었는데 이렇도 쓰인다니 신선하게 다가왔다.
확실히 전개연산자가 대단하고 간결한것 같다
오늘도 문제 해결했다. 이로써 레벨 1단계에서 3페이지는 전부 클리어 할수 있었다
뿌듯하다.