728x90
반응형
크기가 작은 부분문자열
문제설명 :
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
제한 사항
- 1 ≤ p의 길이 ≤ 18
- p의 길이 ≤ t의 길이 ≤ 10,000
- t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.
입출력 예
t | p |
Return |
"3141592" | "271" | 2 |
"500220839878" | "7" | 8 |
"10203" | "15" | 3 |
첫번째 접근
: t 문자열을 돌며 p 길이만큼 t 문자열을 잘라 배열 arr에 넣은 후, p 보다 작거나 같은 수만 filter 하여 그 길이를 반환했다.
function solution(t, p) {
let arr = []
for(let i=0; i<t.length - p.length + 1; i++){
arr.push(+(t.slice(i, p.length + i)))
}
return arr.filter(n => n <= p).length
}
두번째 접근
: 코드를 다시 보니, 로직이 다소 복잡해보였다. 필요한건 해당 조건을 만족하는 숫자의 갯수 이므로 새로운 배열 arr을 만드는 대신 count 변수를 선언하여 조건에 만족하는 숫자일 경우 count를 증가시켰다. 추가로 t 문자열에 slice()를 사용한 후 숫자로 바꾸는 작업은, 보다 명시적으로 나타내기 위해 Number() 을 사용했다.
function solution(t, p) {
let count = 0
for(let i=0; i<t.length - p.length + 1; i++){
if(Number(t.slice(i, p.length + i)) <= p) count++
}
return count
}
728x90
반응형
'자료구조 및 알고리즘 > JavaScript Practice' 카테고리의 다른 글
JS Practice) 프로그래머스 Lv.1 : 숫자 문자열과 영단어 (0) | 2023.07.20 |
---|---|
JS Practice) 프로그래머스 Lv.1 : 비밀지도 (0) | 2023.07.19 |
JS Practice) 프로그래머스 Lv.1 : 직사각형 별찍기 (0) | 2023.07.11 |
JS Practice) 프로그래머스 Lv.1 : 삼총사 (0) | 2023.07.10 |
JS Practice) 프로그래머스 Lv.1 : 최소직사각형 (0) | 2023.06.30 |