[프로그래머스] 제일 작은 수 제거하기 in JavaScript

hyocho·2022년 6월 14일
0

코딩테스트

목록 보기
10/45
post-thumbnail

✅문제

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

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

💡주어진 솔루션

function solution(arr) {
    var answer = [];
    return answer;
}

✍문제풀이

인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
= 배열 내에 같은 수는 없다는 의미.

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

//오류가 났던 답안
function solution(arr) {
    if (arr.length === 1) return [-1];
    else {
        arr.splice(arr.indexOf(Math.min(arr)), 1);
      //Math.min 뒤에는 arr가 아닌 spread연산자를 사용한 ...arr를 사용해야 한다.
    return arr;
    }
}

✔️참고할 좋은 코드

function solution(arr) {
  if (arr.length <= 1) return [-1];
  let min;
  arr.reduce((acc, cur) => min = cur > acc ? acc : cur);
  return arr.filter(e => e !== min);
}

우선 값이 하나이거나 빈 배열을 인자로 받을 경우 [-1]을 반환하고 즉시 함수를 종료한다.
원치 않는 input을 먼저 가려내는 테크닉을 Guard Clause라고 한다.
reduce를 사용하여 이전 값과 현재 값을 비교하여 최종적으로 가장 작은 수(Number)를 알아내고, filter 메소드로 해당 수를 제외한 나머지 배열을 반환한다.

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

📝TIL

  • str.indexOf(searchValue, fromindex) : 문자열에서 원하는 문자열을 검색하여 찾거나 아니면 배열에서 원하는 특정 배열값의 존재여부 등을 확인할 수 있습니다. 배열의 경우 위치값을 index로 반환하는 함수. 일치하는 값이 없으면 -1 을 반환.

  • Math.min([숫자 집합]) 숫자 집합 중에서 가장 작은 수를 리턴하는 함수. 반대로 Math.max([숫자 집합])도 존재한다.

  • splice

  • spread : 배열을 풀어줌. 펼침 연산자.

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12935
참고 사이트 :
1. https://wooder2050.medium.com/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%A0%9C%EC%9D%BC-%EC%9E%91%EC%9D%80-%EC%88%98-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0-javascript-270068f29ded
2. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf
3. https://blog.naver.com/PostView.naver?blogId=cmh348&logNo=222683212906

profile
기록하는 습관을 기르고 있습니다.

0개의 댓글