하샤드 수 + reduce

suyeon·2022년 1월 11일
0

하샤드 수 | Level 1
[문제]
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

[풀이]
// split 쓸거면 String() 사용!
// 더할거면 Number() 사용!

function solution(x) {
    var answer = true;
    
    var sum = 0;
    var arr = String(x).split(''); // 배열
    // split 쓸거면 String() 사용

    for(var i=0; i<arr.length; i++) {
        sum += Number(arr[i]);
        // 더할거면 Number() 사용
    }
    
    if (x % sum == 0) {
        answer = true;
    } else {
        answer = false;
    }
    
    return answer;
}

[다른 사람의 풀이]
// reduce를 사용한 풀이

function solution(x) {
    var answer = true;    
    var n = String(x).split('').reduce((a, b) => Number(a) + Number(b));
    
    answer = x % n == 0 ? true : false;
    
    return answer;
}

[reduce]
배열의 요소들을 하나의 결과로 합칠때 주로 사용한다.

(예제1)

const arr = [ 1, 2, 3, 4, 5 ];
arr.reduce((a, b) => a + b); // 15

(예제2)

[ 2, 4, 5, 6, 8 ]
    .filter(ele => ele % 2 === 0)
    .map(ele => ele * 10);

(예제3) 초기값이 있는 경우

[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
  return accumulator + currentValue;
}, 10); 
//최종 반환 값 20

(첫번째) accumulator=10, currentValue=0, currentIndex=0, array=[0, 1, 2, 3, 4], return값=10

(두번째) accumulator=10, currentValue=1, currentIndex=1, array=[0, 1, 2, 3, 4], return값=11

(세번째) accumulator=11, currentValue=2, currentIndex=2, array=[0, 1, 2, 3, 4], return값=13
...

0개의 댓글

관련 채용 정보