[프로그래머스] Lv.1 제일 작은 수 제거하기 (JavaScript)

혜린·2022년 1월 22일
0
post-thumbnail

🔐 문제

  • 정수를 저장한 배열, arr에서 가장 작은 수를 제거한 배열을 return하는 함수를 완성하라.
  • return하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하라.
  • Example
    • arr가 [4,3,2,1]인 경우는 [4,3,2]를 리턴
    • arr가 [10][-1] 리턴

🔑 풀이

function solution(arr) {
    let min = arr[0];
    let minIndex = 0;
    
    if(arr.length > 1) {
        for(let i = 1; i < arr.length; i++) {
            if(arr[i] < min) {
                min = arr[i];
                minIndex = i;
            } 
        }
        arr.splice(minIndex, 1);
    } else return [-1];
    return arr;
}

📍 풀이과정

1. arr의 길이에 따라 return하는 값이 다르므로 이를 if 조건문으로 먼저 나누어줍니다.
- arr의 길이가 1보다 클 때 : 가장 작은 수를 제거한 배열 return
- arr의 길이가 1보다 작을 때 : [-1] return

2. arr 내에서 가장 작은 수를 찾아 제거
- [ 4, 3, 2, 1 ]가 주어졌다고 했을때, 가장 첫번째 숫자인 4를 기준으로 반복문을 돌릴 것이기 때문에, 변수 min에 arr[0]인 4를 넣어두고 시작.
- 첫번째 수인 4와 두번째 수인 3를 비교해 더 작은 수를 min으로 바꾸어준다. 이와 같은 과정을 각 자리수마다 반복해주는 반복문을 만들어준다.
- 가장 작은 수의 index를 찾아 splice()로 잘라내줄 것이기 때문에, i가 몇번째가지 돌았는지 minindex로 알 수 있게 해준다.


🔑 다른풀이

function solution(arr) {
    return arr.length < 2 ? [-1] : arr.filter(v => v > Math.min(...arr)); 
}
  • arr의 길이가 2보다 작으면 [-1]을 return하고, 2보다 작지 않으면 arr.filter()를 return한다.
  • Math.min(...arr)으로 arr 내에서 가장 작은 수를 찾는다.
  • 위 식의 filter()v > Math.min(...arr) 이 조건에 충족한 요소들만으로 모아 새로운 배열을 반환하므로, 가장 작은 수가 제거된 배열이 반환된다.

💡 배운점

1. splice()

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
  • 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경하는 메서드
  • start : 배열의 변경을 시작할 인덱스
  • deleteCount : 배열에서 제거할 요소의 수
  • MDN 참고

2. filter()

arr.filter(callback(element[, index[, array]])[, thisArg])
  • 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환하는 메서드
  • callback : 각 요소를 시험할 함수. true를 반환하면 요소를 유지하고, false를 반환하면 버린다.
  • MDN 참고
profile
FE Developer

0개의 댓글