1차 공부/알고리즘

나누어 떨어지는 숫자 배열

공대탈출 2022. 11. 23. 10:58
문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

 

제한 조건
arr은 자연수를 담은 배열입니다.
정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
divisor는 자연수입니다.
array는 길이 1 이상인 배열입니다.

 

 

function solution(arr, divisor) {
    var answer = [];
    for (let i=0; i<arr.length; i++){   //입력배열을 모두 검색하는 for문
        if(arr[i]%divisor === 0){   //만약 divisor로 나누어진다면
            answer.push(arr[i])     //반환배열에 집어넣는다.
        }
    }
    answer.sort(function (a,b) {    //answer 오름차순 배열
        return a-b
    })
    if(answer.length ===0) {
            answer = [-1]
        }
    return answer;
}

// sort는 comparefunction이 제공되지 않으면 요소를 문자열로 변환하고 문자열끼리 비교하여 정렬함.
// 따라서 숫자를 정렬하길 원한다면 sort() 매개변수에 function을 넣어 숫자끼리 비교 할 수 있도록 해야함.
// 안에 들어가는 function(a,b)는 a b를 비교하는데,
// return안의 계산값이 0보다 작으면 a를 b보다 낮게 정렬함. (배열 앞값이 낮은경우)   a-b
// 만약 ab가 같다면 0을 반환하고, 서로에대해 변경하지 않음. (같은경우)              a=b
// 만약 계산값이 0보다 크다면 a를 b보다 크게 정렬함. (배열 앞 값이 큰 경우)         b-a

이번 문제를 풀며 sort에 대해 알게 되었다.

오름차순을 하려면

arr.sort(function (a,b) {
    return a-b
})

 

내림차순을 하려면

arr.sort(function (a,b) {
    return b-a
})

 

 

처음 문제를 풀 때는 sort에 대해 몰라서 for문과 if문을 사용해 풀려고 했었는데, 생각보다 쉽지 않았다.

 

1시간동안 여러방법으로 for문도 써보고 for문안에 if문도 넣고 해보았지만, 오름차순 배열을 한다는게 너무 어려웠다.

 

결국 구글링을 통해 sort라는 메소드를 알게되었고, 사용해서 간단하게 풀었다.

'1차 공부 > 알고리즘' 카테고리의 다른 글

문자열 내 p와 y의 개수  (0) 2022.11.23
내적  (0) 2022.11.23
2016년  (0) 2022.11.23
부족한 금액 계산하기  (0) 2022.11.23
x만큼 간격이 있는 n개의 숫자  (0) 2022.11.22