하샤드 수

김정동·2021년 11월 22일
0

알고리즘

목록 보기
1/1

https://programmers.co.kr/learn/courses/30/lessons/12947

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

제한 조건
x는 1 이상, 10000 이하인 정수입니다.

function solution(x) {
  // 자릿수의 합의 총 값을 저장하는 변수 만듬
  let sum = 0;
  console.log(x), typeof x;
}

이렇게 하면 숫자들이 다 들어오는걸 볼 수 있음
숫자 타입의 x 값을 문자열 타입으로 변환

function solution(x) {
  // 자릿수의 합의 총 값을 저장하는 변수 만듬
  let sum = 0;
  x = String(x);
}

x의 인덱스 값을 가져오기를 함 그럼 자릿수 두 숫자를 가져올 수 있음
그걸 반복문으로 만들고 sum에 저장시키기
근데 string으로 바꿔놨으니까 그냥 문자가 합쳐짐
그래서 다시 Number로 다시 바꿔줌
자릿값 합은 구함

function solution(x) {
  let sum = 0;
  x = String(x);

  for (let i = 0; i < x.length; i++) {
    sum += Number(x[i]);
  }
}

이제 조건식으로 true, false 를 리턴시킴, 끝

function solution(x) {
  let sum = 0;
  x = String(x);

  for (let i = 0; i < x.length; i++) {
    sum += Number(x[i]);
  }
  return x % sum === 0;
}

forEach 메소드를 사용해보기

function solution(x) {
  let sum = 0;
  const temp = x
    .toString() // String(x)와 같음
    .split("") // 숫자를 쪼개서 하나씩 넣어줌(문자로)
    .forEach((num) => {
      // 각각의 자릿수를 가져옴, sum에 연산된 값을 숫자로 변환해서 넣음
      sum += Number(num);
    }); //여기까지 하면 자리수의 합을 구할 수 있음
  return x % sum === 0; //나머지값이 0인지 구하는 조건을 달으면 됨
}

reduce 메소드를 사용해보기
reduce는 배열에만 사용할 수 있음

[1, 2, 3, 4].reduce((el, cu) => {
    console.log(el, cu)
    return el + cu
  }, 0);

//여전히 toSring으로 나온 값을 더했으므로 아래서도 숫자로 변환
function solution(x) {
    const sum = x.toString()
                 .split("")
                 .reduce((el, cu) => {
                    return Number(el) + Number(cu);
                 }, 0)
    return x % sum === 0; //나머지로 나눴을 때 0인지 아닌지 구별하기
}
profile
개발자 새싹🌱 The only constant is change.

0개의 댓글