본문 바로가기
나의 개발일지/알고리즘 테스트

[프로그래머스 - Level 1] 하샤드 수 (JS)

by stella_gu 2022. 7. 20.

[문제]
양의 정수 x의 자릿수 합으로 x가 나누어 떨어지면 하샤드 수이다.
하샤드 수이면 true, 아니면 false를 반환.

[로직]
1. 자릿수의 합을 구하기 위해 정수 x를 문자열로 바꾼다.
2. 빈 배열을 생성해주고, 문자열로 바꾼 x를 반복문을 돌며 한자리씩 빈 배열에 Push해준다.
3. reduce()를 이용해 자릿수의 합을 구해준다.
4. x가 자릿수의 합으로 나누어 떨어지면 true를, 아니면 false를 반환한다.

[코드]

function solution(x) {
  let str = x.toString();
  let sumArr = [];
  for (let i=0; i<str.length; i++) {
    sumArr.push(parseInt(str[i]));
  }
  let sum = sumArr.reduce((a,c)=>a+c,0);
  return (x % sum === 0) ? true : false
}

1. 자릿수의 합을 구하기 위해 정수 x를 문자열로 바꾼다.

let str = x.toString();
    

2. 빈 배열을 생성해주고, 문자열로 바꾼 x를 반복문을 돌며 한자리씩 빈 배열에 Push해준다. (이때 정수로 바꾸어 Push)

let str = x.toString();
let sumArr = [];
for (let i=0; i<str.length; i++) {
sumArr.push(parseInt(str[i]));
}
    

3. reduce()를 이용해 자릿수의 합을 구해준다.

let str = x.toString();
let sumArr = [];
for (let i=0; i<str.length; i++) {
sumArr.push(parseInt(str[i]));
}
let sum = sumArr.reduce((a,c)=>a+c,0);
  

4. x가 자릿수의 합으로 나누어 떨어지면 true를, 아니면 false를 반환한다.

let str = x.toString();
let sumArr = [];
for (let i=0; i<str.length; i++) {
sumArr.push(parseInt(str[i]));
}
let sum = sumArr.reduce((a,c)=>a+c,0);
return (x % sum === 0) ? true : false





→ 코드리뷰 때 은지님의 풀이를 보니 2, 3번의 과정을 합쳐서 해도 되는 거였다....!




다른 사람들은 어떻게 풀었나

function Harshad(n){
  return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
}

모르게따....! 난 for가 좋아...!