[프로그래머스] k의 개수

지원·2025년 8월 18일
0

Algorithm

목록 보기
6/6
post-thumbnail

k의 개수

문제

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


입출력 예

ijkresult
11316
105055
31020

풀이

  • 처음엔 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 함수

  • 문자열에서 정규표현식과 일치하는 부분을 찾아배열로 반환함
  • 일치하는 것이 없으면 null을 반환하므로 null 체크가 반드시 필요하다
// 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')
profile
Cat is cute and development is endless

0개의 댓글