문제 설명
두 개의 숫자를 인자로 받는 JavaScript 함수를 작성해야 합니다.
이 함수는 마치 종이 위에서 손으로 계산하듯 두 숫자를 더할 때, 받아올림(carry)이 몇 번 발생하는지 그 횟수를 세어 반환해야 합니다.
예를 들어 179와 284를 더하는 과정을 살펴보겠습니다. 일의 자리에서 9 + 4 = 13이 되어 첫 번째 받아올림이 발생하고, 십의 자리에서 7 + 8 + 1(받아올림) = 16이 되어 두 번째 받아올림이 발생합니다. 따라서 이 두 숫자에 대해 함수는 2를 반환해야 합니다.
예제 코드
다음은 이 문제를 해결하는 JavaScript 코드입니다.
const num1 = 179;
const num2 = 284;
const countCarries = (num1 = 1, num2 = 1) => {
let res = 0;
let carry = 0;
while(num1 + num2){
carry = +(num1 % 10 + num2 % 10 + carry > 9);
res += carry;
num1 = num1 / 10 | 0;
num2 = num2 / 10 | 0;
};
return res;
};
console.log(countCarries(num1, num2));코드 동작 원리
이 코드의 핵심 로직은 다음과 같습니다.
1. 자릿수 추출: 나머지 연산자(%)를 사용해 각 숫자의 일의 자리 값을 구합니다. num1 % 10, num2 % 10이 바로 그 역할을 합니다.
2. 받아올림 판별: 두 자릿수와 이전 단계의 받아올림 값을 모두 더한 결과가 9보다 크면 새로운 받아올림이 발생한 것입니다. 비교 연산의 결과인 true/false를 단항 더하기(+)로 숫자 1 또는 0으로 변환합니다.
3. 자릿수 제거: num / 10 | 0 연산으로 숫자를 10으로 나눈 뒤 소수점 이하를 버려, 다음 자릿수를 검사할 준비를 합니다. 비트 OR 연산자(|)가 정수 변환 역할을 수행합니다.
4. 반복 종료 조건: 두 숫자가 모두 0이 되면 while 루프가 종료되고, 누적된 받아올림 횟수를 반환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
2
179 + 284 = 463이며, 계산 과정에서 받아올림이 두 번 발생했으므로 정확히 2가 출력되는 것을 확인할 수 있습니다.