숫자로 이루어진 문자열 t
와 p
가 주어질 때, t
에서 p
와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p
가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t
="3141592"이고 p
="271" 인 경우, t
의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
p
의 길이 ≤ 18p
의 길이 ≤ t
의 길이 ≤ 10,000t
와 p
는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.입출력 예 #1
본문과 같습니다.
입출력 예 #2
p
의 길이가 1이므로 t
의 부분문자열은 "5", "0", 0", "2", "2", "0", "8", "3", "9", "8", "7", "8"이며 이중 7보다 작거나 같은 숫자는 "5", "0", "0", "2", "2", "0", "3", "7" 이렇게 8개가 있습니다.
입출력 예 #3
p
의 길이가 2이므로 t
의 부분문자열은 "10", "02", "20", "03"이며, 이중 15보다 작거나 같은 숫자는 "10", "02", "03" 이렇게 3개입니다. "02"와 "03"은 각각 2, 3에 해당한다는 점에 주의하세요
function solution(t, p) {
let count = 0
for (let i = 0; i < t.length; i++) {
const sliceStr = t.substr(i, p.length)
if (+sliceStr <= +p) {
if (sliceStr.length < p.length) {
return count
}
count++
}
}
return count
}
function solution(t, p) {
let count = 0
for (let i = 0; i <= t.length - p.length; i++) {
let value = t.slice(i, i + p.length)
if (+p >= +value) count++
}
return count
}
O(n)의 복잡도로 문제를 풀었다. 그래서 무난하게 통과할 수 있었다. 크게 어려운 건 없었지만, 다른 사람들의 풀이 과정을 봤을때, 불필요하게 추가적인 반복을 줄일 수 있었던 부분을 잘 기억해놔야 할 것 같다.