본문 바로가기
코딩테스트

(javascript)크기가 작은 부분 문자열

by 어뇨 2024. 1. 24.
  • 문제 설명숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
  • 예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.

  • 제한사항
    3 ≤ number의 길이 ≤ 13
    -1,000 ≤ number의 각 원소 ≤ 1,000
    서로 다른 학생의 정수 번호가 같을 수 있습니다.

 

풀이

 

function solution(t, p) {
    var answer = 0;

    for(let i = 0 ; i < t.length-p.length+1 ; i++){
        let num = t.slice(i, i+p.length)
        console.log(num)
        answer += num <= p ? 1 : 0
    }


    return answer;
}

 

숫자로 이루어진 문자열 t, p 를 반복해서 비교해야 하기때문에 for문을 썼다.

i < t.length-p.length+1을 한 이유는 for문 안의 t.slice(i,i+p.length) 를 쓰기 위해서인데, 

str.slice()는 첫번째 매게변수는 시작인덱스, 두번째 매게변수는 끝 인덱스를 추출하기때문에

예시 1을보면  t="3141592"이고 길이가 3인 부분 문자열은 314, 141, 415, 159, 592 시작인덱스가 0이여야하고 마지막 시작인덱스는 5이다. 그러므로 slice를 하기위해선 i의 값이 최대 4여야하기때문에 마지막에 +1을 했었다.

제출하고 생각해보니까 +1을 할게아니라 i <= t.length-p.length 이렇게 했었어야 했다.

그리고 answer에 num이 p보다 작거나 같다면 삼항연산자를 써서 1을 더하게 아니라면 0을 더하게끔했다.

'코딩테스트' 카테고리의 다른 글

(javascript) 시저 암호  (0) 2024.01.25
(javascript) 최소직사각형  (0) 2024.01.25
(javascript)삼총사  (1) 2024.01.24
(javascript) 이상한 문자 만들기  (0) 2024.01.23
(javascript)3진법 뒤집기  (1) 2024.01.23