자료구조 및 알고리즘/JavaScript Practice

JS Practice) 프로그래머스 Lv.1 : 크기가 작은 부분문자열

Ryomi 2023. 7. 18. 07:52
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
반응형