제일 작은 수 제거하기

Cottonmycotton·2021년 9월 28일
0

Algorithm

목록 보기
7/44

문제 설명

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

제한사항

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

입출력 예시

🖊 풀이

  • 배열의 순서 그대로 반환 되어야 한다(sort, reverse 사용하면 오답?)
  • 입출력 예시에서 최소값이 맨 뒤에 있던 것 뿐이지 항상 뒤에 위치하지는 않는다는 점. 그 점을 간과하여 pop, push 를 사용하여 배열을 재정렬 하여 오답에서 벗어나지 못했었다.
  • 제한 조건 두번째를 보면 중복 제거는 해당하지 않는다.
    • 서로 다른 인덱스 i,j는 element 값이 중복되지 않는다. 예를들어 배열 {1,1}일때 index i와 j를 비교해보면 arr[1] = arr[2] 임으로 두번째 조건에 충족하지 않는다. 즉, 배열에는 중복되는 element값이 없다.
      (출처: 프로그래머스)

📌 Math.min()

  • 전달받은 인수 중에서 가장 작은 수를 반환한다. 인수가 전달되지 않으면 Infinity를 반환한다.
  • 배열을 인수로 전달받아 배열의 요소 중에서 최소값을 구하려면 Function.prototype.apply메서드 또는 스프레드 문법을 사용해야 한다
    (출처: 모던 자바스크립트 Deep Dive)
  • indexOf를 사용하여 최솟값의 인덱스를 구하고 splice 를 사용하여 최소값을 잘라낸 배열을 만들었다.

💡 코드

function solution(arr) {
if (arr.length >= 1){
     const minimumNumber = Math.min(...arr);
     const deleteNumber = arr.splice(arr.indexOf(minimumNumber), 1);
     answer = arr;
 
  if(arr.length === 0){
    arr.push(-1);
    answer = arr;
  }
}
return answer;
}

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

문제 출처: 프로그래머스

profile
투명인간

0개의 댓글