본문 바로가기
Algorithm

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

by Baest 2021. 11. 9.

[링크]

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

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하

programmers.co.kr

 

 

[문제설명 및 입출력 예]

 

 

[내가 제출한 코드 및 풀이]

 

📝풀이과정

더보기

1. arr 배열을 돌면서 해당 값들을 모두 나눠야하므로, arr의 길이만큼 반복(for문)

2. arr[i] (arr의 i번째) 값을 divisor로 나눈 나머지가 0이면

3. answer에 해당 값(arr[i])을 넣는다

4. answer의 값을 정렬하는데

5. return a-b 를 이용해 오름차순 정렬한다   *return b-a 를 이용하면 내림차순 정렬

6. 나누어 떨어진 값이 없을 경우

7. answer에 -1을 넣어준다

 

💡 .sort() 로 정렬될 줄 알았는데, 안되더라.. 알고보니 자바스크립트에서 sort 함수는 배열을 문자열 타입으로 비교하기 때문이라고 한다. 

 

.sort() 로 정렬이 안되었던 이유는?!

그냥 .sort()만으로는 정렬이 안 되는 걸까? 안된다.
그 이유는 자바스크립트의 sort 함수는 기본적으로 배열을 문자열(String) 타입으로 간주하고 비교하기 때문이다. 예를 들어 [b,a,c]라는 배열에 .sort()를 적용하면 [a,b,c]로 알맞게 정렬해준다. 그
런데 숫자도 마찬가지다. [90,100,110]을 sort()로 정렬하면 자바스크립트는 값을 "90" "100" "110"으로 간주하고 비교한다. 이때 "90"과 "100"을 비교 시 앞자리 9와 1을 비교, 100보다 90이 더 크다는 결론을 내린다.

*출처: https://change-words.tistory.com/64

 

[JavaScript] .sort(function(a, b) { return a - b; })가 작동하는 원리?

우선 이 포스팅은 내용에 대한 이해가 완전히 되지 않은 상태에서 현재까지의 이해를 정리하기 위해 작성함을 밝힌다. 관련 내용을 stackoverflow, W3Schools, MDN을 비롯해서 국내외 블로그 등 자료를

change-words.tistory.com

 

 

 

[다른 사람의 코드]

1
2
3
4
function solution(arr, divisor) {
  const answer = arr.filter((num) => num % divisor === 0);
  return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);
}
 
cs
  • filter 를 이용해서 삼항 연산자로 풀이

 

1
2
3
4
5
6
7
8
function solution(arr, divisor) {
    var answer = [];
    arr.map((o) => {
        o % divisor === 0 && answer.push(o);
    })
    return answer.length ? answer.sort((a, b) => a - b) : [-1];
}
 
cs
  • map 을 이용해서 삼항 연산자로 풀이