Programmers/Level 1

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

emayom 2021. 6. 28. 17:12

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도 입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️

 

 

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

 

👇🏻문제링크

👇🏻

시행착오

( + 코드를 작성하면서든 생각들.)

아주 호오옥시나 누군가 보시고 푸는데 방해가 될까봐 접어놓으려한당 ,,,,!

 

1.

그냥 내림차순으로 정렬하고 하나를 pop()했더니

이렇게 적었더니 정확도에서 0점이 나왔다..ㅎㅎㅎ.....

질문을 보니까 어떤 분께서 배열의 순서가 바뀌면 안된다고 하셔서 .sort()를 쓰지않고 해봐야겠다.

더보기
function solution(arr) {
    var answer = arr.sort((a,b) => b-a);
    (answer.length == 1)? answer[0] = -1 : answer.pop(0);
    return answer;
}

2.

그래서 가장 작은 값을 Math.min()을 통해 따로 구하고,

.filter를 통해 min보다 큰 값만 추출해서 answer에 담았다.

이랬더니 다시 100점이 나와서 통과할 수 있었다 ㅠㅠ 

더보기
function solution(arr) {
    if(arr.length == 1){
        return [-1];
    }
    var min = Math.min.apply(null, arr);
    var answer = arr.filter((el) => el>min);
    
    return answer;
}

3.

나름 조금 더 정리해서 answer, min의 선언을 위쪽으로 정리했다,,, 🤓

그리고 결과문을 바로 리턴하도록 했다!

더보기
function solution(arr) {
    var answer;
    var min = Math.min.apply(null, arr);
    
    return (arr.length == 1)? answer = [-1] : 
                              answer = arr.filter((el) => el>min);
}

4.

다른 분들을 보니 .splice()를 사용하신 분들도 계셨다.

.splice()를 할 때 indexOf()를 사용하면 중복되는 최소값 모두를 필터링 할 수 없다는 말씀도 있으셨지만,

문제의 테스트 예제에는 중복되는 값이 없어서 괜찮을 것 같긴하다.

 

테스트 케이스에 [4, 3, 2, 1, 1, 1, 1] => 이렇게 추가해서 결과가 잘 나오는지 테스트 해봤는데 

.filter()는 잘 걸러져서 [4, 3, 2]가 잘 나오는데 .splice()는 [4, 3, 2, 1, 1, 1] 으로 나온다 ! 참고참고,,

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