알고리즘

[Programmars] 제일 작은 수 제거하기 (JavaScript)

프린벼르 2022. 2. 10. 21:15

제일 작은 수 제거하기 문제

1. 나의 생각 흐름

먼저 최소값을 구해야겠다고 생각했다. 그래서 최솟값을 구하는 로직을 for문을 이용해서 구했다. 그후 최소값을 제거한 배열을 구하는 것은 어떤 함수를 이용해야 하는지 생각하다가 filter함수를 사용해야겠다고 생각했다. 그래서 filter함수로 최소값을 제외한 배열을 구하고 배열의 원소가 1개인 것은 리턴으로 [-1]을 받게끔 로직을 구현해보았다.

2. 나의 코드 정리

function solution(arr) {
    let answer = [];
    let min = arr[0];
    for(let x of arr){
        if(x < min){min = x;} // 최솟값 구해주기
    }
	if(arr.length === 1){return [-1];}
	return arr.filter(e => e !== min); 
    // filter함수 이용해서 최솟값을 제외한 나머지 배열 구하기
}

정말 간단한 문제이지만 filter함수를 잘 사용하지 못해서인지 이걸 풀어낸게 뿌듯하다.

filter 함수 - 원하는 조건으로 필터링한 값을 구해내는 함수
---------------------------------------------------------------------------------------------------------------
filter를 사용하는 방법은 callback함수를 통해 주어진 3개의 인자(요소 값, index, 순회하는 대상 객체)를
사용해 Boolean 값인 true 또는 false 값을 반환하는 함수를 만드는 것 Array.prototype.filter ( callbackfn [ , thisArg ] )
---------------------------------------------------------------------------------------------------------------
< 예제들 >
const numbers = [1, 2, 3, 4, 5]; 
const result = numbers.filter(number => number > 3); 
console.log(numbers); // [1, 2, 3, 4, 5]; 
console.log(result); // [4, 5]​
const numbers = [1, 2, 3, 4, 5];
const result = [];

for (i = 0; i < numbers.length; i++) {
    const number = numbers[i];

    if (number > 3) {
        result.push(number);
    }
}

console.log(result); // [4, 5]​
const numbers = [1];

numbers.filter((number, index, source) => {

    // number: 요소값
    // index: source에서 요소의 index
    // source: 순회하는 대상

    console.log(number);
    // 1

    console.log(index);
    // 0

    console.log(source);
    // [1]

    return number > 3;
});​


3. 다른 사람들의 코드

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

indexOf()메소드를 이용해서 최솟값을 제거하는 문법을 이용해서 풀은 것 같다. 간단하게 구현할 수 있는 방법인 것 같다. 중간에 (...arr)은 전개연산자를 사용한 것으로 보이는데.. 이것에 대해서는 따로 블로그에 정리해서 올려야겠다.

4. 결론

filter함수와 indexOf(), 전개연산자에 대해서 좀 더 공부하는 시간을 가져봐야겠다.