첨에 생각난 방법은 i부터 j까지의 숫자를 모두 이어붙인 다음 정규표현식으로 찾는것
for문 돌려서 붙일까 하다가 다른 방법이 있지 않을까 싶어서 지피티한테 물어봤는데
Array.from()을 이용하더라
Array.from({length: j - i + 1}, (_, idx) => idx + i)
첫 번째 매개변수로 들어간 { length: j - i + 1 }는 유사배열객체다.
length라는 속성이 있기 때문에 length만큼의 배열을 만들게 되는데, 이때 각 요소는 undefined로 초기화 되는듯?
두 번째 매개변수로 들어간 (_, idx) => idx + i는 배열을 순회할 때 쓰일 mapFn이다.
첫 번째 매개변수는 배열의 요소, 두 번째 매개변수는 인덱스를 받아와서 사용할 수 있다.
하지만 지금은 요소를 사용하지 않을거니까 _로 비워두기, 인덱스를 받아와서 i랑 더해주면 i와 j 사이의 정수들의 배열이 만들어진다.
⬇️ 순회가능객체일 때와 유사배열객체일 때의 차이
찾아야하는 숫자는 k, 정규표현식을 동적으로 만들어야 하므로 생성자함수를 이용해야 한다.
const regexp = new RegExp(k, "g")
"g"는 모든 문자에서 찾는다는 global 플래그라고 한다. 없으면 제일 첫 번째 일치 항목만 찾음.
⬇️ 완성한 코드
function solution(i, j, k) {
const regexp = new RegExp(k, "g")
return Array.from({length: j - i + 1}, (_, idx) => idx + i).join("").match(regexp)?.length || 0
}
.match(regexp)의 결과가 null일 수도 있기 때문에 옵셔널체이닝을 붙여준다