본문 바로가기
기초다지기/JS 코딩테스트

javascript 배열 내 가장 작은 수 제거하기

by 김빵그 2023. 10. 19.

문제 

정수를 저장한 배열 arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수, 배열이 빈 배열인 경우 배열에 -1을 채워 리턴하여라

내 코드 풀이 1

function solution(arr) {
    var answer = [];
    for(let i = 0; i < arr.length; i++) {
        if(arr[i] < arr[i+1]) {
            answer.push(arr[i+1]);
        }else if(arr[i] > arr[i+1]) {
            answer.push(arr[i]);
        }
    }
    return answer.length ? answer : [-1];
}
  • 좀 지저분한 코드긴 해도 ... 테스트 1,2번은 통과한 코드  
  • for문으로 사용하여 각 크기를 비교후 맞는 값을 리턴하였다

리팩토링 1

function solution(arr) {
    const answer = [];
    
    for (let i = 0; i < arr.length - 1; i++) {
        answer.push(Math.max(arr[i], arr[i+1]));
    }
    
    return answer.length > 0 ? answer : [-1];
}
  • 위의 코드를 좀 더 보기 좋게 리팩토링 한 것
  • Math.max를 사용하여 큰 숫자를 push하게 한다

근데 여기서 문제가 생겼다. 테스트 1/2는 통과했는데 채점시에 모든 케이스가 실패...

문제에서 내가 놓친게 있나 다시 보는 중..

수정된 코드

function solution(arr) {
    var min = Math.min(...arr); 
    var a = arr.filter(item => item !== min);
    return a.length ? a : [-1];
}
  • 배열에서 가장 작은 값을 찾은 후 
  • 필터를 사용하여 작은 값을 제거해 리턴하는 코드로 변경을 했다

위의 for문 코드는 배열을 순회하며 현재 요소와 다음 요소를 비교해 큰 값을 결과 배열에 추가하는 형식이었는데. 요소의 순서가 변경되는 거 같다.                                                                                                                                                                                                                                                                                                                                                                     

그 외 코드

function solution(arr) {
    arr.splice(arr.indexOf(Math.min(...arr)),1);
    if(arr.length<1)return[-1];
    return arr;
}
function solution(arr) {
    if (arr.length > 1) {
        var minNum = Math.min(...arr);
        var idx = arr.indexOf(minNum);
        arr.splice(idx, 1);
    } else {
        arr = [-1];
    }
    return arr;
}