하샤드 수

이지영·2024년 8월 9일

문제:

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

제한 조건:

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

입출력 예

풀이과정

  1. x의 값을 찢는다.
  2. 찢은 x의 값을 새로운 배열로 받는다.
  3. 그 배열의 모든 값을 더하여 하샤드 수를 구한다.
  4. x를 하샤드 수로 나누었을 때 나머지가 0이라면 true 아니라면 false를 리턴
  1. x의 값을 찢는다.
    x의 값을 찢기 위해서는 split('')를 사용하였는데
    split('')는 문자열에만 작동하기 때문에
    x의 값을 toString()을 이용하여 정수로 바꿔준 후 split()을 사용하였다.

    const harshadSum = x.toString().split('')
  2. 찢은 x의 값을 새로운 배열로 받는다.
    새로운 배열로 받기 위해서는 map함수를 이용하였고
    배열의 각 요소를 숫자로 변환하기 위해 내장함수인 Number을 사용했다.

    const harshadSum = x.toString().split('').map(Number);
  3. 그 배열의 모든 값을 더하여 하샤드 수를 구한다.
    배열의 모든 값을 더하는 방법은 여러가지가 있지만
    최근 배운 .reduce()를 이용해보았다.

.reduce()란
배열에 포함된 모든 요소에 대해 주어진 함수를 실행하고, 그 결과를 누적하여 최종 결과를 반환한다.
.reduce((acc,curr) => acc + curr)
여기서 acc는 반환값을 누적
여기서 curr는 현재 처리 중인 배열 요소

const Hashad = harshadSum.reduce((acc,curr) => acc+curr);
  1. x를 하샤드 수로 나누었을 때 나머지가 0이라면 true 아니라면 false를 리턴
    3항 연산자를 이용

    	return x % Harshad === 0 ? true:false;
        

내가 제출한 답:

채점 결과

테스트 통과!!

알고리즘 문제 처음엔 머리아팠는데
점점 익숙해지면서 문제를 푸는게 재미있어졌다!!

0개의 댓글