개발 공부/알고리즘

[프로그래머스 알고리즘] "제일 작은 수 제거하기" JavaScript /Math.min(), ES6/ES2015, ES6/ES2016, .splice(), indexOf()

U_D 2022. 3. 16. 09:50

1. 문제 설명

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

 

 

 

2. 제한 조건

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

 

 

 

 

3. 예시

입력/출력

 

4. 풀이

[splice / indexOf / Math.min / if..else]

  1. 배열의 길이가 1보다 크면 배열의 값 중 최소값이 존재하는 경우
  2. 배열에서 splice (a,b) 는 a번째 부터 b만큼 삭제 라는 의미
  3. indexOf는 해당되는 값의 위치(index 즉, 배열 내 몇번째 인지)를 찾음
  4. Math.min은 고유한 변수에서만 작동하기 때문에 배열에서 작동하게 변경 필요
  5. ES6에서는 ES2015와 ES2016에서 가능하도록 적용 방법이 생김
    *답변 아래에서 설명
function solution(arr) {
    var answer = [];
        if (arr.length > 1) {
            arr.splice(arr.indexOf(Math.min(...arr)),1) 
          //배열에서는 Math.min이 안된다.. 그래서 ES6/ES2015 또는 ES6/ES2016 적용방법이 있다.
          //문제에 쓴건 ES6/ES2016
            answer = arr
            } else {
            answer = [-1]
            }
    return answer;
}

 

Math.max 또는 Math.min 배열 적용 방법

 

[ES6 / ES2015]

var nums = [1, 2, 3]
Math.min.apply(Math, nums)    // 1
Math.max.apply(Math, nums)    // 3
Math.min.apply(null, nums)    // 1
Math.max.apply(null, nums)    // 3
 

[ES6 / ES2016]
ES2016에서는 destructing 할당을 통해 할당 구문은 어레이 또는 개체에서 데이터를 추출하여 별도의 변수로 만들 수 있는 JavaScript 식

const nums = [1, 2, 3]
Math.min(...nums)    // 1
Math.max(...nums)    // 3