Problem Solving/프로그래머스

[프로그래머스/JavaScript] 나누어 떨어지는 숫자 배열

세고래 2022. 9. 7. 04:14

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


1) 풀이

이번 문제는  난이도 자체는 꽤 쉬웠으나 sort에서 '아..! 맞다!' 라고 생각했던 문제,,

자바스크립트의 기본이라면 기본이었는데 왜 까먹고 있었던 걸까

알고리즘 문제는 개발과는 또 다른 영역이다 ..

 

우선 간단하게 반복문으로 divisor로 딱 나눠떨어지는 요소들만 answer에 집어넣었다

그다음엔 answer에 하나도 들어갈 요소가 없는 경우 -1을 집어넣는 것 처리!

(이제 보니까 sort 부분은 그냥 else 에 넣어줄걸 그랬다.. 까비)

그다음은 오름차순으로 정렬하라는 문제의 조건에 맞게 그냥 answer.sort() 로 처리해주었는데,

이상하게 테케 1 의 배열이 [5, 10] 이 아니라 [10, 5] 로 나오는 것이다!

 

테케 중에서 유일하게 답이 안 맞는 케이스였는데, 콘솔 로그 찍어보니 sort() 이후에 자꾸 [10, 5] 로 나와서 꽤 당황했다..!

이 문제를 c++로 풀 때는 sort 로 정렬하면 됐지만, 자바스크립트는 조금 다르다는 것!

 

arr.sort([compareFunction])

compareFunction: 요소의 순서를 결정하는 데 사용되는 함수. 첫 번째 값이 두 번째 값보다 작을 경우 
음수 값을 반환하고, 같을 경우 0을 반환하며, 그렇지 않을 경우 양수 값을 반환한다. 
파라미터를 생략할 경우 요소는 ASCII 문자 기준 오름차순으로 정렬된다.

자바스크립트는 아스키 문자를 기준으로 오름차순으로 정렬하기 때문에..!

원하는 값을 얻기 위해서는 [] 안에 들어가는 compareFunction을 작성해주어야 한다

해당 compareFunction 에 대한 자세한 설명은 아래 참고자료에 첨부해놓겠다

 

정말 쉬운 거지만.. 또 하나 알아가는 것에 행복한 하루 😁

2) 최종 소스코드
function solution(arr, divisor) {
    let answer = [];
    for(let i=0;i<arr.length;i++){
        if(arr[i]%divisor===0){
            answer.push(arr[i]);
        }
    }
    if(answer.length===0) answer.push(-1);
    answer.sort(function(a,b){ // 오름차순으로 정렬. answer.sort((a, b) => a - b); 도 가능
        return a-b;
    });
    return answer;
}
3) 참고자료

https://brunch.co.kr/@swimjiy/12

 

JavaScript sort() 함수 톺아보기

생각 없이 쓰던 정렬 제대로 알아보자. | 평소 코딩 테스트 준비 때문에 알고리즘 문제를 자주 풀곤 하는데, sort(), apply() 같은 메서드부터 Map, Set 같은 타입까지 자바스크립트에 내장된 다양한 문

brunch.co.kr

 

728x90