[프로그래머스] Lv 1. 하샤드 수

morecodeplease·2024년 3월 2일
0

프로그래머스 Lv 1

목록 보기
12/19
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(x) { 
  let hab = String(x).split('').reduce((acc, cur) => acc + cur * 1, 0); 
  if(x % hab == 0) {
      return true;
} else return false; 
}

console.log(solution(11)); // 출력 : false
console.log(solution(12)); // 출력 : true
  1. 정수로 받은 xString으로 문자열로 바꾸고, split으로 각자리마다 분리
  2. reduce로 각 자릿수 더하고 * 1로 정수로 변환
  3. 입력받은 x를 위에서 처리한 hab으로 나눈 나머지 값이 0이면(나눠지면) return true
  4. 0이 아니면(나눠지지 않으면) return false

🧵 다른 풀이

function solution(x) {
    let num = x;
    let sum = 0;
    do {
        sum += x%10;
        x = Math.floor(x/10);
    } while (x>0);

    return !(num%sum);
}
}
  1. 입력받은 x를 10으로 나눈 나머지를 sum에 누적해서 더해준다.
  2. x를 10으로 나누고 내림을 해준값을 x에 대입한다.
  3. x의 값이 0보다 크면 x를 누적한 sum으로 나눈 나머지의 반대를 return해준다.

다른 풀이는 한번에 이해가 안되서 내 풀이처럼 푸는게 직관적인 것 같다.

profile
Everyday's a lesson

0개의 댓글