본문 바로가기
우코딩 코딩테스트 일기/JavaScript 코딩테스트 (Lv. 1)

JavaScript 코딩테스트 Lv.1 (제일 작은 수 제거하기)

by 민우's 코딩 2024. 5. 31.

 

제일 작은 수 제거하기

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내가 직접 푼 방법

 

function solution(arr) { // arr = [4,3,2,1] 이면 1을 지워야함
    let little = arr[0];
     for (let i = 0; i<=arr.length; i++) {
         if (arr[i] <= little) {
             little = arr[i];
         }
     }
    let newarr = arr.filter((v) => v !== little);
    if (newarr.length == 0) { // newarr가 빈 배열이면 [-1]을 리턴
        return ([-1]);
    } else {
     return newarr;   
    }
}

정답을 보지 않고 푸려고 했더니

테스트 1 통과 (5.43ms, 43.3MB)

 

통과는 했어도 5.43ms 가 걸린 것을 보고 짚고 넘어가야겠다고 생각 했다.

 

쓸때 없이 긴 코드를 줄이는 확실한 방법은 아무리 봐도 배열을 for문을 통해 작은 수를 찾는 부분 인것 같았다.

 

그렇다면 핵심 적으로 저 코드를 줄여보자고 생각해서 해본 방법은
splice 함수와 Math.min 함수를 이용해서 작은 수를 자르는 방법 이다.

 

그렇게 적용하면 다음과 같다.

 

arr.splice(arr.indexOf(Math.min(...arr)), 1);
arr 배열의 가장 작은 수 하나를 찾아서 splice(삭제) 시키는 간단한 한 줄의 코드이다.

 

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

이런식으로 코드를 변경하면

테스트 1 통과 (0.56ms, 42.7MB)

 

테스트 1의 시간이 0.56ms로 확실히 줄어든 것을 알 수 있다.

 

이번엔 테스트 시간이 5ms가 넘었기에 확인은 했지만 앞으로도 내 코드에 대해서 한 번씩 더 확인하는 습관을 가지면 좋을 것 같다.