JS 프로그래머스 제일 작은 수 제거하기

이명진·2022년 12월 27일
0

코드카타

목록 보기
53/69

문제요약

배열이 주어지고 배열에서 제일 작은 값을 제거한 배열을 리턴하면 된다.
단 빈배열일땐 [-1] 을 리턴하면 된다.

내가 푼풀이

첫시도

첫번째 시도로 로직을 이렇게 작성하였다.

function solution(arr) {
  let
  answer= new Array(...arr)
  answer=answer.sort()
  if(arr.length ===1){
      return [-1]
  }
 let eleminate = arr.indexOf(answer[0]);
  answer = arr.splice(eleminate,1)
  return arr;
}

처음 배열을 정렬을 시키고 첫번째 인덱스는 무조건 작은 숫자가 되니
첫번째 인덱스를 제거한 값을 리턴하였다.
그러나 몇몇 의 테스트는 계속 통과하지 못하여서 질문하기의 힌트를 보게되었다.
확인해보니 마음대로 정렬하면 안된다는것.
하지만 새로운 배열에서 정렬시킨후에 작은 숫자를 찾고
그 작은 숫자를 받은 배열에서 인덱스를 찾은다음에 그 인덱스를 제거한 것이라서
원본 배열은 정렬을 안한 상태로 순전히 작은 숫자만 리턴할터인데
왜 안풀리는지 이해가 안되었다.

두번째 시도

그래서 다음 풀이로 이런 로직을 작성하였다 .


function solution(arr) {
if(arr.length == 1){
  return [-1]
}else{
  let newArr = [...arr]
  let small = newArr.sort((a,b)=>{return a-b})[0]
  let a = arr.filter((x,index)=>{return x>small})
  return a
}
}

위의 조건과 같은 방법으로 새로운 배열을 정렬하여서 첫번째 작은 수를 찾은다음에
이번에는 필터로 비교를 하고 리턴을 하는 것
이번에는 통과할수 있었다. 위와 아래의 방식에서 무슨 차이가 있는지 잘모르겠다
위에도 맞는 방법이라고 생각이 드는데 조금 더 고민해봐야겠다.

다른사람들의 풀이

다른 사람들은 원배열 그대로에서 Math.min을 사용하여서 최소값을 구하였다.
이방법은 생각하지 못하였는데 또하나 배우고 간다.
다른사람의 풀이 로직이다.


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

훨씬 간결하게 푼것 같다. 하지만 먼저 if조건으로 -1을 뱉으면 더 효과적일것 같다

다른 사람의 풀이중 아래의 로직을 보았다

const minValue = Math.min.apply(null, arr)

apply함수는 this 를 줄때 필요한것으로 알고 있었는데 이렇도 쓰인다니 신선하게 다가왔다.
확실히 전개연산자가 대단하고 간결한것 같다

오늘도 문제 해결했다. 이로써 레벨 1단계에서 3페이지는 전부 클리어 할수 있었다
뿌듯하다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글