JavaScript 코딩테스트 하샤드 수 (21일)

String(x).split('') 를 통해 정수를 문자열로 바꾸고 배열로 바꾸는 거 까지는 알겠는데 각 배열을 더하려면 어떤 메서드를 써야할지 모르겠어서 gpt에게 물어봤다.
.map(Number) // 각 문자를 숫자로 변환
.reduce((acc, num) => acc + num, 0); // 숫자들을 모두 더함
function solution(x) {
if(String(x).split('').map(Number).reduce(acc,mum) => acc+num,0.x%acc==0) {
answer = true;
} else anwer = false
}
return answer;
}
오류가 나서 gpt에게 어디가 틀린건지 물어봤다.

오타랑 오류가 있는 것 같아서, 수정하고 구성을 약간 바꾸었다.
변수 i를 선언하여 먼저 자리수의 합을 구한 후 if문을 통해 하샤드 수를 구하려 했다.
function solution(x) {
i = (String(x).split('').map(Number).reduce((acc,num) => acc+num,0));
if ( x / i == 0) {
return answer = true;
} else {
return answer = false;
}
}

false만 맞고 true 은 틀리다..
그러면 if문에서 계산이 틀린 것 같아서 나머지 연산자로 바꾸었다.
function solution(x) {
i = (String(x).split('').map(Number).reduce((acc,num) => acc+num,0));
if ( x % i == 0) {
return answer = true;
} else {
return answer = false;
}
}

/를 %인 나머지 연산자로 바꾸니 문제 통과했다!
다른사람들 풀이


let sum = String(x) // 숫자 x를 문자열로 변환합니다.
split('') // 문자열을 각 문자로 분리하여 배열로 만듭니다.
map(Number) // 배열의 각 요소를 Number 함수를 사용하여 숫자로 변환합니다.
reduce((acc, num) => acc + num, 0); // 배열의 모든 숫자를 합칩니다.
acc는 누적값을 의미하고, num은 현재 배열 요소를 의미합니다. 초기값은 0입니다.
else 는 조건이 없다. lf나 lf else에의 조건문이 맞지 않을 경우에 else 결과로 바로 보내버린다.