본문 바로가기
알고리즘 스터디/프로그래머스 스킬체크 레벨 1(끝)

[프로그래머스 스킬체크 레벨 1] 하샤드 수 문제 풀이 및 설명 - 자바스크립트[JavaScript]

by 레일라오리덕 2021. 7. 13.
728x90

https://programmers.co.kr/learn/courses/30/lessons/12947

 

코딩테스트 연습 - 하샤드 수

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하

programmers.co.kr

 

문제

 

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

 

 

제한 사항

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

결괏값 예시

 

arr return
10 true
12 true
11 false
13 false

 

기본 제공 틀

 

function solution(x) {
    var answer = true;
    return answer;
}

 

풀이 [JavaScript]

 

 

728x90

 

저는 우선 입력된 값을 문자열로 변환해주고, split함수를 이용하여, 변환된 문자 값을 각각 하나씩 뜯어주었습니다.

이 듣어준 값은 split함수에 의해서 배열의 형태로 나오게 되는데, 첫번째 입력값을 예로 들자면, 10 이라는 숫자는 문자열 '10'이 되고, split함수로 인해,  testNum의 값은 ['1', '0']의 값으로 나오게 됩니다.

이렇게 나온 배열을 정규식 for문을 이용하여, 배열의 길이만큼 돌면서 sum값에 각각의 문자열을 숫자로 변환하여 더해주면 됩니다.

이때, 배열의 값은 문자열이므로, 숫자로 변환해주지 않는다면, 1과 0이 더해진 값이 아닌 10이 나오게 되므로 주의해야합니다!

 

그리고, 나온 sum(입력된 값의 합)의 2로 나눈 나머지가 0이라면 하샤드 수이므로 true를, 아니라면 false값을 반환하도록 로직을 구현해보았습니다.

 

function solution(x) {
    var splited = String(x).split('');
    var sum = 0;
    for (var i = 0; i<splited.length; i++){
        sum += Number(splited[i]);
    }
    if( x % sum === 0 ){
        return true;
    }else{
        return false;
    }
}

 

다른 풀이 [JavaScript]

 

이 문제를 조금 더 간결하게 푸는 방법으로는 reduce함수를 활용하는 것이다.

 

reduce함수 사용법은, array.reduce( ( a, v ) => a + Number(v) ) 구조에서 보면, a는 accumulator, 즉 누산기이다. 그리고 v는 value이다. 그래서 array의 값을 기본적으로 0의 인덱스부터  돌면서  array의 값들(value)을 각각 더해주면 a의 값에 저장이 되는 형식이다. 아래에서는 마지막에 0을 입력해주었는데, 이는 인덱스 0에서부터 돌라고 명시를 해준 것이다.

만약, 인덱스를 활용하고 싶으면, (a, v, i)를 입력하여 필요한 상황에 맞게 활용해주면 된다.

 

그리고, true, false를 return하는 문제이므로, if, else 문을 복잡하게 구현할 필요 없이, x % sum === 0이라고 구현하면,  값이 0이면 true를, 아니라면 false를 반환하게 된다.

 

function solution(x) {
    var splited = String(x).split('');
    var sum = splited.reduce((a, v) => a + Number(v), 0);
    return x % sum === 0;
}

 

채점 결과 [JavaScript]

 

728x90

댓글