양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
입출력 예제
arr | return |
---|---|
10 | true |
12 | true |
11 | false |
13 | false |
function solution(x) {
const arr = x.toString().split("");
const num = arr.reduce((prev, curr) => parseInt(prev) + parseInt(curr))
const result = x % num === 0;
return result;
}
숫자 s를 string으로 변경하고 각 자릿수를 담은 배열 arr을 생성합니다.
reduce메소드를 사용하여 모든 자릿수를 더한 값을 num에 대입합니다.
마지막으로 x값과 num을 나누어 나머지가 0인지 확인합니다.
function solution(x) {
let result = 0;
x = x.toString();
for (let i = 0; i < x.length; i++) {
result += +x[i];
}
return x % result === 0;
}
배열로 나누지 않고 string으로 변환만 하고 reduce 메소드보다 빠르게 처리될 수 있도록 for문을 사용했습니다.
그 결과 속도는 기존보다 빨라졌습니다.
No | 기존 | 변경 |
---|---|---|
1 | 0.12ms, 30.2MB | 0.04ms, 30.3MB |
2 | 0.12ms, 30.4MB | 0.04ms, 30.3MB |
3 | 0.13ms, 30.1MB | 0.05ms, 30.4MB |
4 | 0.13ms, 30.3MB | 0.04ms, 30.5MB |
5 | 0.09ms, 30.2MB | 0.07ms, 30.3MB |
6 | 0.08ms, 30.4MB | 0.07ms, 30.3MB |
7 | 0.10ms, 30.3MB | 0.04ms, 30.2MB |
8 | 0.09ms, 30.2MB | 0.04ms, 30MB |
9 | 0.08ms, 30.3MB | 0.12ms, 30.2MB |
10 | 0.11ms, 30.4MB | 0.04ms, 30.1MB |
11 | 0.13ms, 30.5MB | 0.06ms, 30.3MB |
12 | 0.06ms, 30.3MB | 0.04ms, 30MB |
13 | 0.11ms, 30.2MB | 0.05ms, 30.4MB |
14 | 0.06ms, 30.3MB | 0.05ms, 30.4MB |
15 | 0.06ms, 30.5MB | 0.04ms, 30.1MB |
16 | 0.25ms, 30.4MB | 0.04ms, 30.3MB |
17 | 0.07ms, 30.1MB | 0.05ms, 30.3MB |