(Lv. 1) 크기가 작은 부분 문자열 (문제 링크)
숫자로 이루어진 문자열 t, p가 주어졌을 때,
t에서 p와 길이가 같은 부분 문자열 중, 해당 문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 부분 문자열의 개수를 return하는 solution 함수를 완성하라.
예를 들어, t = "3141592", p = "271"인 경우, t에서 길이가 3인 문자열은 "314", "141", "415", "159", "592"이며,
이 중 271보다 작거나 같은 수는 141, 159 뿐이므로 2(개)를 return한다.
t.length - p.length
까지 진행하도록 설정한다.function solution(t, p) {
let answer = 0;
for (let i = 0; i <= t.length - p.length; i++) {
let subArray = t.substring(i, i + p.length);
if (Number(subArray) <= Number(p)) answer++;
}
return answer;
}
문제를 해결할 때 가장 어려웠던 부분이었다.
단순하게 부분 문자열
이라는 단어를 보고 배열을 생성하려 시도했다.
하지만, 배열을 어떻게 생성해야 하는지가 문제였다.
정규 표현식
또는 p.length
를 이용하여 길이를 특정하는 것은 알겠으나, 부분 문자열 배열
을 생성하는 방법을 찾지 못했고, 탐색 결과, 반복문
을 사용해야 한다는 것을 깨달았다.
반복문
을 사용하는 방법을 찾다보니, 배열을 만들 필요 없이 p의 길이만큼 블럭을 생성하여 t를 한번만 순회하면 되는 문제였다.
for (let i = 0; i <= t.length - p.length; i++) {
let subArray = t.substring(i, i + p.length);
}
이렇게 구현하면 추가로 filter()
를 사용할 필요 없이, for문 내부에서 subArray
의 값과 p
의 값을 비교하여 subArray
의 값이 p
보다 작을 때마다 answer++;
를 해주면 되는 부분이었다.