프로그래머스 - 하샤드 수

이한결·2023년 1월 21일
0

프로그래머스

목록 보기
93/107
post-thumbnail

문제 설명

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

제한 조건

● x는 1 이상, 10000 이하인 정수입니다.

입출력 예

입출력 예 설명

입출력 예 #1

10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.

입출력 예 #2

12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.

입출력 예 #3

11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.

입출력 예 #4

13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.

나의 코드

function solution(s) {
    const str = String(s);
    const arr = [...str];
    const num = [];
    arr.forEach((a) => num.push(Number(a)));
    let sume = num.reduce((a, b) => a + b);
    if (s % sume === 0) {
        return true;
    } else {
        return false;
    }
}

코드 리뷰

  1. 문자열로 변환한다.

  2. 스프레드를 이용해서 배열에 담는다. (10이면 '1'과 '0'이 출력되도록 하기 위해서이다.)

  3. 새로운 배열을 만든다.

  4. forEach로 문자를 숫자로 전환하여 num배열에 넣는다.

  5. num 배열에 2숫자를 더한다.

  6. 나눈 것이 0이면 true 0이 아니면 false로 반환한다.

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

코드를 간결하게 줄인 버전이다. 저렇게 하면 안되고, 남의 코드이지만, 너무 멋있다...

profile
평범한 삶을 위하여

0개의 댓글