한 걸음씩 기록하며

[프로그래머스 코딩테스트] 나누어 떨어지는 숫자 배열 본문

알고리즘 & 코딩테스트

[프로그래머스 코딩테스트] 나누어 떨어지는 숫자 배열

Haksae 2022. 1. 16. 00:25

[나누어 떨어지는 숫자 배열]

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

 

⛏제한 조건

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

 

📁 입출력 예시

 

👉🏻  답안

function solution(arr, divisor, answer=[]) {    // 답안이 너무 길어보여서 answer을 고정 변수로 선언
    for (let i = 0; i < arr.length; i++) {      // 역시나 for문..
      if ( arr[i] % divisor === 0 ) {           // 0이면, arr[i]에 푸쉬
        answer.push(arr[i])
      }
    } 
    if (Boolean(answer[0]) !== true) {          // answer에 아무 것도 없으면 undefined이니
      answer.push(-1)                           // boolean형으로 변환하면 false
    }                                           // 그러면 push -1
    return answer.sort((a,b) =>  a - b) ;
}                                               // 마지막 sort로 오름차순 정렬

 

📑  간단한 설명

코드가 너무 난잡하고 가독성이 떨어져서 아쉽다..

설명은 안에 나름? 상세하게 해두었다.

약간 새로운 개념인 .sort는 나중에 따로 정리해둘 필요가 있어 보인다. 여기서는 아주 간략히 정리하겠다.

 

숫자형을 sorting하는 함수는 다음과 같다.

 // 오름차순 예시 두개
1)
numbers.sort(function (a,b){
	return a-b;
});

2)
numbers.sort((a, b) => a - b);

// 내림차순 예시 두개
1)
arr.sort(function (a,b){
	return b-a;
});

2)
numbers.sort((a, b) => b - a);

참고할만한 블로그

https://dudmy.net/javascript/2015/11/16/javascript-sort/

https://dudmy.net/javascript/2015/11/16/javascript-sort/

 

💪🏻 공부하면 좋을 답안

function solution(arr, divisor) {
    var answer = arr.filter(v => v%divisor == 0);
    return answer.length == 0 ? [-1] : answer.sort((a,b) => a-b);
  • .filter 함수는 배열을 순회하며 요소마다 조건 확인 후 조건에 만족하는 element로 구성된 새로운 배열을 리턴한다.
  • 여기서는 arr를 하나씩 v % divisor ==0 에 대입하여 조건에 부합하면 return, 아니면 pass 한다.
  • return에서는 answer.length ==0 조건을 넣어줌으로써, 공백일 때를 구분하고 .sort arrow func으로 마무리했다.

* .map( )과 filter( )는 유사해보이지만, filter는 조건을 걸어준다는 것에서 차이를 보인다. 때에 따라 잘 쓰면 좋겠다.

 

filter 함수 참고할 사이트

https://velog.io/@tjdud0123/javascript-map-filter-%ED%95%A8%EC%88%98

https://7942yongdae.tistory.com/49

Comments