낭 만 당

프로그래머스 Lv 1 - 하샤드 수 (JavaScript) 본문

Programming Record

프로그래머스 Lv 1 - 하샤드 수 (JavaScript)

낭만알파카 2025. 7. 7. 14:54

문제 설명

 

자연수 x가 하샤드 수인지 판단하는 문제입니다. 하샤드 수란, 자신의 자릿수의 합으로 나누어 떨어지는 수를 의미합니다.

 

예를 들어, 18의 자릿수 합은 1 + 8 = 9이고, 18 % 9 == 0이므로 하샤드 수입니다.

 

입력 조건

  • x는 1 이상 10,000 이하의 자연수

출력 조건

  • x가 하샤드 수이면 true, 아니면 false를 반환

문제 접근

  1. 숫자 x를 문자열로 변환해 각 자릿수로 나눈다.
  2. 자릿수 하나하나를 정수형으로 변환하여 모두 더한다.
  3. 원래 수 x가 자릿수 합으로 나누어 떨어지는지 확인한다.
function solution(x) {
    var answer = true;
    var num = 0;

    x = x.toString(); 

    for (let i of x) {
        num += Number(i); 
    }

    if (x % num != 0) {
        answer = false;
    }

    return answer;
}

 

코드 개선

이렇게 푼 것이 처음에 작성한 코드이다.

좀 더 고민하면서, 함수형 스타일로  코드를 개선했다.

1. split('')을 통해 문자열을 문자 배열로 분리

2. reduce()를 통해 자릿수 합을 계산

3. 나머지 연산으로 하샤드 수 여부 판단

function solution(x) {
    const sum = x.toString()
                 .split('')
                 .reduce((acc, cur) => acc + Number(cur), 0);
    return x % sum === 0;
}

 

 

느낀 점

1. 문자열 변환을 활용하면 자릿수 접근이 용이하다.

2. 간단한 조건 판단으로 문제를 해결할 수 있으며, 계산량이 매우 작아 시간복잡도 측면에서도 효율적이다.

3. 초보 단계인 나에게 코딩테스트 연습 초반 단계에서 연습하기 적절한 문제였고, 문자열-숫자 간 형 변환 및 반복문, 조건문 사용 능력을 점검할 수 있었다.