본문 바로가기
Algorithm/Programmers

[Programmers] 제일 작은 수 제거(JavaScript)

by 백승전 2022. 4. 4.

 

알림

 

본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.

 

문제

 

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

 

코딩테스트 연습 - 제일 작은 수 제거하기

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1

programmers.co.kr

 

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요.

단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

 

풀이(테스트 불통과)

 

 첫 번째로 sort()를 사용해 정렬을 하고, 맨 첫 번째를 삭제하면 되는 방향으로 접근했고, 마지막에 배열의 길이가 0이면 -1을 담아 출력하도록 코딩을 했습니다.

 

코드(테스트 불통과)

 

function solution(arr) {
    let answer = [];
    
    arr.sort().shift();
    
    if(arr.length === 0) {
        answer.push(-1);
    } else {
        answer.push(arr);
    }
    
    return answer;
}

 

 

다시 생각을 해 보니 '들어온 값을 담은 배열 중에서 가장 작은 숫자'를 삭제해야지 이걸 오름차순으로 정렬해 버리면, 기대값과 다르게 출력될 수박에 없다는 것을 알았고, 정렬을 하지 않고 그냥 가장 작은 값을 찾아 삭제하는 방향으로 가기로 했습니다.

 

따라서 Math.min()을 사용해 가장 작은 숫자를 찾고, 배열의 자리를 지정해서 삭제해주는 splice() 함수를 사용하도록 결정했습니다.

 

코드(테스트 통과)

 

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

 

위에서 말한 것처럼 Math.min으로 배열에서 가장 작은 수를 찾아 indexOf에 담아 그 숫자의 배열 자리를 구했습니다.

 

그리고 splice() 함수를 사용해 그 배열의 자리수부터 시작해 한 자리 수만큼만(결론적으로 가장 작은 숫자만 지정) 삭제하였고, return 하기 전에 조건문으로 배열의 길이가 0일 때(비어있을 때) 배열에 -1을 담아 return 하도록 개발했습니다.

 

노트

 

Math.min(): 배열에서 가장 작은 수 출력

indexOf(): 특정 위치 찾기

splice(): 원하는 위치에 요소 추가 및 삭제

댓글