알림
본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.
문제
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을 완성해주세요.
풀이
문제대로 받아 온 숫자를 각각 더한 뒤, 더한 숫자로 기존 숫자를 나눴을 때, 0이면 true, 아니면 false로 출력하면 됩니다.
따라서, 받아오는 숫자를 더하기 전에 쪼개야 하므로, split() 함수도 사용하고, 변수 하나를 만들어 쪼갠 숫자를 담아주고 마지막으로 더하면 될 것 같습니다.
코드(테스트 불통과)
function solution(x) {
let sum = 0;
let arr = String(x).split("");
for(let i = 0; i <= arr.length; i++) {
sum += arr[i]
}
return x % sum === 0 ? true : false
}
답이 false인 테스트는 통과하고, 답이 true인 테스트는 틀린 것으로 보아, 작성한 코드의 답이 전부 false로 출력되는 것 같습니다.
많은 테스트 중에 한 개도 0이 도출되지 않을 리가 없기 때문에, 나눌 때 숫자가 아닌 문자열인가 싶어, 문자열을 숫자로 변환해주는 Number() 함수에 담아서 출력해보기로 했습니다.
코드(테스트 통과)
function solution(x) {
let sum = 0;
let arr = String(x).split("");
for(let i = 0; i < arr.length; i++) {
sum += Number(arr[i])
}
return x % sum === 0 ? true : false
}
제가 생각한 대로 Number() 함수를 사용해 문자열을 숫자로 받았으니 해결되었습니다.
그리고 그 이전에 문제가 하나 더 있었는데요. 반복문에서 i의 범위를 arr 배열의 길이보다 작거나 같은 게 아닌, 작게 지정해줘야 합니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 피보나치 수(JavaScript) (0) | 2022.04.30 |
---|---|
[Programmers] 콜라츠 추측(JavaScript) (0) | 2022.04.29 |
[Programmers] 최대공약수와 최소공배수(JavaScript) (0) | 2022.04.26 |
[Programmers] 직사각형 별 찍기(JavaScript) (0) | 2022.04.25 |
[Programmers] x만큼 간격이 있는 n개의 숫자(JavaScript) (0) | 2022.04.24 |
댓글