[프로그래머스] 하샤드 수 - JavaScript
하샤드 수
문제
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
- x는 1 이상, 10000 이하인 정수입니다.
입출력 예제
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 |
Author And Source
이 문제에 관하여([프로그래머스] 하샤드 수 - JavaScript), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sisofiy626/프로그래머스-하샤드-수-JavaScript저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)