본문 바로가기
Developer/Algorithm

Programmers 프로그래머스 코딩테스트 연습 - 제일 작은 수 제거하기 (JavaScript)

by roqkfrlfhr 2020. 9. 2.

Programmers 프로그래머스 코딩테스트 연습 - 제일 작은 수 제거하기 (JavaScript)

 

Programmers의 코딩테스트 연습문제 Level 1의 제일 작은 수 제거하기 문제를 JavaScript를 사용하여 문제를 풀어보도록 하겠습니다.

 

문제 설명

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

 

제한 조건

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

 

입출력 예

arr return
[4,3,2,1] [4,3,2]
[10] [-1]

 

 

작성한 답

solution.js

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

 

설명

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열이 빈 배열일 경우 배열에 -1을 채워 리턴하고 빈 배열이 아닐 시 배열 그대로를 리턴하는 함수, solution을 완성하는 문제입니다.

쉽게말해서, 배열 arr의 length, 즉 배열 arr의 요소의 갯수가 1 이하면 [-1]을 리턴하고, 배열 arr의 요소의 갯수가 2개 이상이면 배열 arr에서 가장 작은 수를 제거한 배열을 리턴하면 되는 문제입니다.

역시 코드를 풀어내어 보여드리는 것이 가장 좋을 것 같습니다.

solution([4, 3, 2, 1]);

function solution(arr) {
    console.log("arr : ", arr);					// arr : [4, 3, 2, 1]
    
    if(arr.length > 1) {
        var min = Math.min(...arr);
        console.log("가장 작은 수 : ", min);			// 가장 작은 수 : 1
        
        var indexOfMin = arr.indexOf(min);
        console.log("가장 작은 수의 index : ", indexOfMin);	// 가장 작은 수의 index : 3
        
        arr.splice(indexOfMin, 1);
        console.log("가장 작은 수를 제거한 배열 arr : ", arr);	// 가장 작은 수를 제거한 배열 arr : [4, 3, 2]
        
        return arr;
    } else return [-1];
}

코드를 보시면 아시겠지만 설명을 드리겠습니다.

배열 arr이 입출력 예의 [4, 3, 2, 1] 일때의 예시로 들어보겠습니다.

먼저 애초에 배열 arr의 요소의 갯수가 1 이하면 바로 [-1]을 return 해줍니다.

배열 arr의 요소의 갯수가 1보다 많으면

Math.min()으로 arr의 가장 작은 수를 구합니다.

여기서 arr앞에 전개연산자...을 붙여서 사용합니다. 그래야 Math.min()을 사용하실 수 있습니다.

가장 작은 수를 구했으면 arr.indexOf()를 사용해 가장 작은 수가 arr의 몇번째 index에 있는지 구합니다.

그리고 arr.splice(index, 1)arr의 가장 작은 수가 있는 index로 부터 한개의 요소만 삭제하는 것으로 가장 작은수를 삭제합니다.

그리고 가장 작은 수가 삭제된 배열을 return 해주는 것으로 문제를 해결할 수 있습니다.

 

 

제가 틀린 부분이 있다거나 더 좋은 방법을 아시는 분이 계시다면 댓글로 공유 부탁드립니다!

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청 사항은 언제든지 말씀 해주세요!

 

감사합니다.


댓글