안녕하세요.
알고리즘 문제 출처:
https://www.testdome.com/questions/javascript/check-digit/17555
주어진 숫자가 1자리 숫자가 될 때까지 각 자리 숫자를 합치는 함수를 만들려고 합니다.
한자리 숫자가 됐을 때,
console.log로 찍으면 원하는 숫자가 나오는데
return을 하면 undefined라고 뜹니다..
왜 그럴까요?
function createCheckDigit(membershipId) {
let len = `${membershipId}`.length;
if (len === 1) {
console.log(membershipId); // 7
return membershipId; // undefined
} else {
let arr = membershipId
.toString()
.split('')
.map((item) => parseInt(item, 10));
let sum = arr.reduce((prev, curr) => prev + curr, 0);
createCheckDigit(sum);
}
}
아래처럼 푸니 풀리네요..
근데 length를 반복해서 안좋은 코드같아서 마음이 좀 그런데;
위에건 안되고 아래건 되는 이유가 궁금하네요..
function createCheckDigit(membershipId) {
let len = `${membershipId}`.length;
if (len == 1) {
return membershipId;
} else {
let arr = membershipId
.toString()
.split('')
.map((item) => parseInt(item, 10));
let sum = arr.reduce((prev, curr) => prev + curr, 0);
let lenth = `${sum}`.length;
if (lenth >= 2) return createCheckDigit(sum);
if (lenth === 1) return sum;
}
}
console.log(createCheckDigit('27686'));