하샤드 수 | 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
...