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

이유정·2022년 10월 10일
0
post-thumbnail

문제 설명

양의 정수 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

내 풀이 코드

이렇게 풀면 true 값은 잘 리턴하는데 , false값은 잘 리턴이 안된다.
콘솔에 돌려보니까 그냥 모든 값에 true를 리턴하는 코드다...

function solution(x) {
    // 10 은 1,0 1로 나눠져서 하샤드 수 
    // 12는 1,2 3으로 나눠져서 하샤드 수 
    // 11은 2로 나눠지지 않아서 놉 
    let arr = String(x).split('') // 수를 문자로 바꾼후, split을 이용해 배열에 각각 넣는다.
    let number = 0; 
    for(let el of arr){
        number = number + el; 
    }
    if(x%number === 0){
        return true; 
    }
    return false; 
}

문제 해결: 배열안에 있는 값들이 문자로 취급 되어서
아무리 number 0과 더해봤자 문자들이 합쳐지는 모양이 되어버렸다
solution(13)
'013'
따라서 Number()를 이용해 배열 각각 요소를 숫자 타입으로 바꿔준후 더해줬다.

해결 코드

function solution(x) {
    let arr = String(x).split('') // 수를 문자로 바꾼후, split을 이용해 배열에 각각 넣는다.
    let number = 0; 
    for(let el of arr){
        number = number + Number(el); 
    }
    if(x%number === 0){
        return true; 
    }
    return false; 
}

마지막으로 이쁘게 정리한 코드

function solution(x) {
    let arr = String(x).split('') 
    // x를 문자로 바꾼후, split을 이용해 배열에 각각 넣는다.
    let number = 0; 
    for(let el of arr){
        number += Number(el); 
    }
    return x%number === 0 ? true : false
}
profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글