코딩테스트 | (JavaScript) 프로그래머스 : 하샤드 수

trevor1107·2021년 8월 11일
0

✅문제

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

❕ 제한사항

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

🎹📢입출력 예제

✍풀어보기

function solution(x) {
    let answer = true;
    let number = x;
    let sum = 0;
    
    // 10으로 나눈 나머지 값을 더해주고 기존의 값을 10으로 나누어준다.
    while(number > 0){
        sum += number % 10;
        number /= 10;
        
        // 정수형으로 변환하지 않으면 float가 되어버린다.
        number = parseInt(number); 
    }
    answer = (x % sum == 0);
    return answer;
}

// 또 다른 방법
function solution(x) {
    let answer = true;
    let sum = 0;
  
    x.toString().split('').map(value => sum += Math.floor(value));
    answer = (x % sum == 0);
  
    return answer;
}

자바스크립트에서는 int와 float가 명확하게 나누어져 있지 않아서, 동적으로 변환하는 것을 확인하고 int형으로 변환시켰다. 이것도 C++방식으로 푼 것 같다. 제출하고 생각해보니 parseInt는 반올림일테니 원하는 결과로 정확하게 나오려면 Math.floor 함수가 더 적절하지 않았을까 생각이 들었다.

자바스크립트에서는 강력한 기능이라고 생각하는 것 중 하나가 숫자를 String으로 변환시키고 String관련 함수들을 사용할 수 있어서 split함수를 사용해 자리수를 간편하게 나눌 수 있었다. 하지만 문자열로 인식되기 때문에 다시 형변환 해주어야 한다. 그래서 속도면에서는 약간 손해볼 것 같았지만 미세하게 더 빨랐다?! 오호.. GOOD!!

프로그래머스에서 한번 문제를 전체적으로 개편 했는지 다른사람들의 풀이는 개편 전이라고 안내되어 있다.



참고 자료 및 사이트 (감사합니다)

profile
프론트엔드 개발자

0개의 댓글