본문 바로가기

프로그래밍/알고리즘

코딩테스트 연습하며 javascript 배우기 level1 - 나누어 떨어지는 숫자 배열


오늘 배울 것

▷javascript 배열의 filter

화살표 메소드(Arrow Functions)

 

★연습문제 출처

프로그래머스(https://programmers.co.kr/)

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


문제 설명

array  element  divisor 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수

solution 작성해주세요.

divisor 나누어 떨어지는 element 하나도 없다면 배열에 -1 담아 반환하세요.

 

제한사항

· arr 자연수를 담은 배열입니다.

· 정수 i, j 대해 i  j 이면 arr[i]  arr[j] 입니다.

· divisor 자연수입니다.

· array 길이 1 이상인 배열입니다.

 

입출력 

arr divisor return
[5, 9, 7, 10] 5 [5, 10]
[2, 36, 1, 3] 1 [1, 2, 3, 36]
[3,2,6] 10 [-1]

입출력  설명

입출력 #1

arr 원소  5 나누어 떨어지는 원소는 5 10입니다따라서 [5, 10] 리턴합니다.

 

입출력 #2

arr 모든 원소는 1으로 나누어 떨어집니다원소를 오름차순으로 정렬해 [1, 2, 3, 36] 리턴합니다.

 

입출력 #3

3, 2, 6 10으로 나누어 떨어지지 않습니다나누어 떨어지는 원소가 없으므로 [-1] 리턴합니다.


🎯 나의 풀이

function solution(arr, divisor) {

    var answer = arr.filter(x => x % divisor === 0);

    if (answer.length === 0) {
        answer.push(-1);
    }
    
    return answer.sort((a, b) => a - b);
}

 

🔑 해설

1. Array 객체의 filter 함수

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

 

Array.prototype.filter()

filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.

developer.mozilla.org

filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환한다.

 

 해답 소스에서

arr.filter(x => x % divisor === 0)

filter 메소드 내부에 정의된 테스트를 통과한 배열(arr) 요소에 한하여,

 요소만으로 배열(arr) 재구성하여 반환한다. 예를 들어,

var arr = [1, 2, 3, 4, 5];
var res = arr.filter(x => x % 2 === 0);// arr의 요소 중, 2로 나누어 떨어지는 요소만을 새로운 배열로 삼고 res에 저장한다.
console.log(res);	// [2, 4]

 

2. Arrow Functions(화살표함수)

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/%EC%95%A0%EB%A1%9C%EC%9A%B0_%ED%8E%91%EC%85%98

 

화살표 함수

화살표 함수 표현(arrow function expression)은 function 표현에 비해 구문이 짧고  자신의 this, arguments, super 또는 new.target을 바인딩 하지 않습니다. 화살표 함수는 항상 익명입니다. 이  함수 표현은 메��

developer.mozilla.org

javascript ES6 문법의 큰 특징 중 하나인 기능이다. 오늘 문제의 풀이에도 쓰인 문법이다!

 

여기서는 간단하게 특징만 짚어보겠다. 다음 함수는 우리에게 가장 익숙한 문법으로 쓰였다.

 

hello = function() {
  return "Hello World!";
}

이를 화살표 함수로 나타내면 다음과 같다.

hello = () => {
  return "Hello World!";
}

또, 지금과 같이 리턴값을 가진 단일문장이라면 한 번 더 줄이는 것이 가능하다.

hello = () => "Hello World!";

 

이 포스팅에서는 간단한 함수를 예로 들었지만,

무언가 새 것이 나오고 그걸 배우고자 한다면 그 깊이는 끝도 없다는 것을 우리 개발자들은 알고 있다.

앞서 링크한 MDN 레퍼런스를 꼭 참고하자.

 

 

🏆 마치며

처음  문제를 보고 '이건 for문이다.' 하여

조건에 해당하는 값은 answer 요소를 push하는 방식이 가장 먼저 떠올랐으나,

알고리즘을 해결함을 전제로앞으로 javascript 트렌드에 맞게 익힘과 동시에

코드의 효율성도 생각하며 블로그를 포스팅 함이 목적이라 생각하며

위와 같이 해결해 보았다.😄

 

P.S.

오늘 풀이부분에는 배열 객체의 메소드인 sort()도 있으나,

이 또한 유용한 메소드이고 자주 사용되는 기능이기에 언젠가 따로 포스팅을 해야겠다.