양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
제한 조건
x는 1 이상, 10000 이하인 정수입니다.
입출력 예 설명
입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.
입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.
입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.
function solution(x) {
var answer = true;
return answer;
}
function solution(x) {
let sum = 0;
//sum 이라는 변수 설정
let arr = String(x).split("");
// 입력받는 정수 x를 String(x)로 문자열로 형변환 해준 후, 한글자씩 나누고 arr라는 배열에 대입해준다.
for(let i = 0; i < arr.length; i++){
sum += Number(arr[i]);
}
//arr의 인덱스 하나씩 올려주면서 각 원소들을 sum에 더해준다.
return (x % sum == 0) ? true : false;
// x를 sum으로 나눈 나머지가 0 이면 true, false 가 반환되는 삼항연산자로 마무리
}
C언어를 사용할 때에는 두 자리 이상의 숫자는 모두 10으로 나누어서 자르는 방법으로 끊었기 때문에 처음에는 그와 같이 생각했었다. 정수를 자리수로 취급해서 더해야 하므로 문자열로 변경하는 과정이 필요하고(아래 참고 사이트에 첨부) , 그 후 반복문을 사용해서 더해주기.
07.01 수정
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;
}
복습하면서 계속 오류가 났는데, sum += Number(arr[i]) 부분을 계속 arr[i]라고 적어주었기 때문이다. 위에서 형변환으로 문자열 상태이기 때문에 Number로 다시 형변환해서 sum 에 넣어주어야 한다.
function solution(x) {
let answer = true;
let tempArr = []
let num = String(x)
for(let i = 0; i < num.length; i++) {
tempArr.push(Number(num[i]));
}
let sum = tempArr.reduce((a, b) => (a + b))
if (!(x % sum === 0)) {
answer = false;
}
return answer;
}
function solution(x){
let num = x;
let sum = 0;
do {
sum += x%10;
x = Math.floor(x/10);
} while (x>0);
return !(num%sum);
}
do .. while
은 테스트 조건이 거짓으로 평가될 때까지 지정된 구문을 실행한다. 각 자리수는 문자열로 변환해서 더하는 것이 아니라, 처음에 내가 착안했던 것처럼 정수를 10으로 나누고 자리수를 10씩 줄이면서 Math.floor()
로 버림하여 각 자리수를 더한다.
String(x).split('')
을 사용하면 한 번에 문자열을 잘라서 배열에 저장할 수 있다. 값을 입력하지 않으면 문자열 전체가 배열에 return된다.정수를 문자열로 형변환하기
삼항연산자
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12947
도움되었던 사이트 :
1. https://hianna.tistory.com/491
2. https://velog.io/@yujin1760/javascriptsplit-%ED%95%A8%EC%88%98
3. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Conditional_Operator