본문 바로가기
프로그래밍/JavaScript

[Js] Array에서 순서 변경하지 않고 특정 값 삭제하기 🧚🏻‍♀️ / 제일 작은 수 제거하기

by hi-rachel 2023. 1. 21.

[프로그래머스] 제일 작은 수 제거하기 문제 예시 

정수를 저장한 배열, 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]

 

 


 

위 문제에서 array 순서를 바꿔준 채로(sort) 제일 작은 수를 제거하고 return 하면 테스트 케이스 모두 실패가 나온다.

기본 array 순서는 지키면서 특정 값(가장 작은 수)만 삭제 하는 방법은 아래와 같다.

 

function solution(arr) {
    let min = [...arr].sort((a, b) => a - b)[0];
    let result = arr.filter((item) => item !== min);
    return result.length > 0 ? result : [-1];
}

 

arr를 복사해서 정렬한 후 제일 작은 수를 찾아주고 filter로 제일 작은 수 값을 걸러주면 된다!

위 방식으로 없애고 싶은 값을 지정한 후, filter로 그 값이 아닌 array를 다시 반환해주면 원하는 특정 값만 제거 가능하다!

 

 

- 다른 풀이

function solution(arr) {
    const min = Math.min(...arr);
    return arr.length !== 1 ? arr.filter(i => i !== min) : [-1]
}

역시 arr를 복사해 사용하고 sort 대신 Math.min()으로 최솟값을 찾아줬다.

 

 

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

splice()를 이용한 풀이

 

 

참고 사이트

How can I remove a specific item from an array?

 

How can I remove a specific item from an array?

How do I remove a specific value from an array? Something like: array.remove(value); I have to use core JavaScript. Frameworks are not allowed.

stackoverflow.com

 

 

🙂 공부하며 정리하는 글입니다. 공감과 피드백 환영합니다.