1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.
1 ≤ i < j ≤ 100,000
0 ≤ k ≤ 9
i | j | k | result |
---|---|---|---|
1 | 13 | 1 | 6 |
10 | 50 | 5 | 5 |
3 | 10 | 2 | 0 |
split()
함수를 활용하여 풀어보려 했고, 쉽게 해결 가능했다.match()
와 정규식을 활용한 해결법이 있다는 것을 알게 되고 학습 차원에서 아래처럼 풀어보게 되었다.function solution(i, j, k) {
let result = 0;
for (let l = i; l <= j; l++) {
let str = l.toString();
// 동적으로 생성된 정규 표현식으로 k의 등장 횟수를 세기
const matches = str.match(new RegExp(k, 'g'));
// matches가 null일 경우 0을 반환, 아니라면 matches의 길이를 반환(null 체크)
result += matches ? matches.length : 0;
}
return result;
}
📌 match 함수
// global 플래그 사용에 따른 차이
let str = "Hello World";
console.log(str.match(/o/)); // 첫 번째 'o'만 찾음
console.log(str.match(/o/g)); // 모든 'o'를 찾아 반환 (global)
new RegExp(`${k}`, 'g')
new RegExp(k, 'g')