알고리즘 하샤드수

.·2021년 7월 3일
0

알고리즘

목록 보기
5/21

문제설명

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

내장함수를 사용하면 비교적 간단하게 풀 수 있다
다른 방법도 시도해 보고 싶어서 while, 나머지, 몫을 이용해서 풀어보았다
while의 조건을 정하는게 어려웠다

방법 1 내장함수 이용

function solution(x) {
  var answer = true;
  
  const sum=x.toString().split("").reduce((a,b)=>a+Number(b),0)
  
    if(x%sum!==0)return false
  return answer;
}

방법 2 while, 몫, 나머지 이용

function solution(x) {
  var answer = true;
  
  let sum = 0;
  let origin = x;

  while (x) {
    sum += x % 10;
    x = Math.floor(x / 10);
  }
  console.log(sum);

  if (origin % sum !== 0) return false;

  return answer;
}
  1. 전달 받은 x는 계속 바뀔 것이므로 origin에 미리 복사해둔다
  2. 일의 자릿수 부터 sum에 더해 나가는데 x를 10으로 나눈 나머지를 의미한다
  3. 다음턴을 돌 때는 x를 10으로 나눈 몫을 이용해야 하므로
    • x=Math.floor(x/10) 소수점을 제외하기 위해서 floor사용해준다
  4. !!몫이 0일지라도 이미 나머지는 sum에 더해주고, 다음턴은 진행되지 않는다
  5. original number를 sum으로 나눠 떨어지지 않으면 false를 return 해준다
profile
Divde & Conquer

0개의 댓글

관련 채용 정보