문제 소개
이번 문제에서는 숫자 n을 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 0부터 n까지 숫자를 하나씩 세어 나가는 과정에서 숫자 9가 총 몇 번 등장하는지 계산하고, 그 횟수를 반환해야 합니다.
예를 들어 n이 100이라면, 9, 19, 29처럼 일의 자리에 9가 들어가는 경우와 90~99처럼 십의 자리에 9가 들어가는 경우를 모두 포함하여 총 20번의 9가 등장하게 됩니다.
예제 코드
다음은 위 문제를 해결하는 JavaScript 코드입니다 −
const num = 100;
const countNine = (num = 0) => {
const countChar = (str = '', char = '') => {
return str
.split('')
.reduce((acc, val) => {
if(val === char){
acc++;
};
return acc;
}, 0);
};
let count = 0;
for(let i = 0; i <= num; i++){
count += countChar(String(i), '9');
};
return count;
};
console.log(countNine(num));
코드 동작 원리
이 코드는 크게 두 부분으로 나누어 동작합니다.
1. countChar 헬퍼 함수: 문자열과 찾고자 하는 문자를 인자로 받아, 해당 문자가 문자열 안에 몇 번 등장하는지 세는 역할을 합니다. 내부적으로 split('')으로 문자열을 개별 문자 배열로 분리한 뒤, reduce()를 사용해 일치하는 문자의 개수를 누적합니다.
2. 메인 반복 로직: 0부터 n까지 모든 숫자를 순회하면서 각 숫자를 String(i)로 문자열로 변환한 후, countChar 함수를 호출해 '9'의 등장 횟수를 누적합니다. 이렇게 하면 한 자리 숫자뿐만 아니라 여러 자리 숫자 속의 모든 9를 놓치지 않고 셀 수 있습니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다 −
20
n이 100일 때 9는 일의 자리에서 10번(9, 19, 29, ..., 99), 십의 자리에서 10번(90~99) 등장하므로 최종 결과는 20이 됩니다.