본문 바로가기

알고리즘 코딩

나누어 떨어지는 숫자들로만 배열을 만드는 알고리즘

문제는 제목 그대로다. 자세한 문제 출처는 아래와 같다. 

https://school.programmers.co.kr/learn/courses/30/lessons/12910

 

일단 나의 코드는 아래와 같았다.

function solution(arr, divisor) {
    var answer = [];
    arr.map((element) => {
        if(element % divisor === 0) {
            answer.push(element)
        }
    })
    if(answer.length===0) {
        answer.push(-1)
    }
    answer.sort((a,b) => a-b)
    return answer;
}

복잡하다.

 

그리고 모범답안? 을 보고 내가 쳐본 코드는 아래와 같다.

filter () 메서드를 사용했다는 점이 포인트다. filter() 는 보아하니 기존 배열에서 조건식을 true로 만족하는 요소만 남겨서 새로운 배열을 만드는 메서드다. 이번 문제처럼 기존 배열의 요소 중 일부를 그대로 남겨야 할 때 사용하면 좋을 것 같다. 

function solution(arr, divisor) {
    var answer = [];
    answer = arr.filter((element) => element % divisor === 0)
    return answer.length === 0 ? [-1] : answer.sort((a,b) => a-b )
    // a와 b는 answer 배열의 요소다. 배열내에서 a,b 의 순서는 a가 뒤쪽 , b는 a보다 앞쪽 요소다.
    // 뒤쪽 요소에서 앞쪽 요소를 뻈을 때 양수가 나오면 요소들의 순서를 그대로 놔둔다. 음수가 나오면 순서를 바꾼다.
    // (a,b) => a-b 이 함수값이 음수가 나오면 a,b 간의 순서를 바꾼다.
    // 즉 앞쪽 요소가 뒤쪽 요소보다 크면 서로 위치를 바꾼다. 오름차순 정렬이 된다. 
}

sort() 메서드에 들어가는   compareFn  에 대한 주석도 넣었다.

 compareFn  은 난해한 지점이 좀 있지만 다 이해할 수 있다.

 

특히 아래 두 링크를 참조하면 이해할 수 있다.

1) sort() MDN

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

2) sort() 관련 포스팅

https://velog.io/@jakeseo_me/Javascript-Sort%ED%95%A8%EC%88%98%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9E%A1%EC%A7%80%EC%8B%9D

 

Javascript Sort함수에 대한 잡지식

javascript sort 함수는 당신이 원하는대로 동작하지 않을 것이다. (만일 당신이 비교 함수를 작성하지 않는다면)

velog.io

 

이 포스팅에서, '아래와 같다' 는 말을 한 횟수는 아래와 같다.

5