Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 크기가 작은 부분 문자열 본문

⚙️ 코딩테스트

[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 크기가 작은 부분 문자열

썸머몽 2023. 4. 20. 14:08
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 = "3141592", p = "271" 이 주어졌을 때, 먼저 예시처럼 314, 141, 415, 159, 592 5가지 수가 나와야 한다. t를 1씩 더해 앞으로 나아가게 하되 p와 같은 길이여야 하며, t의 길이를 넘어서는 안된다. 저 5가지 자릿수를 보면 인덱스가 012, 123, 234, 345, 456 으로 이루어져 있다. 마지막 456의 인덱스 4는 t.length - p.length로, i는 0부터 시작해 t.length - p.length까지 1씩 증가한다고 보면 된다.

 

이렇게 for문을 돌렸을 때, 3자리씩 끊어주어야 한다.이 끊어주는 역할을 substring이라는 메서드가 한다. 첫 번째 인자부터 마지막 인자의 바로 앞까지를 끊어준다.즉 substring(i, i+ t.length - p.length) 으로 계산할 수 있다.

 

314(012)가 나오게 된 건, 0 부터 0+4(4) 로 실질적으로 끊어지는 부분은 3이라 012 이렇게 인덱스가 잘리게 된다.

이렇게 자른 것은 string이기 때문에 parseInt나 Number로 정수화 한 후 p보다 작거나 같은지 조건문을 돌린 후, count ++ 하면 된다.

 

저 범위를 생각하는데에 조금 걸렸다. 인덱스로 접근한다는 건 알았는데 인덱스를 어떻게 쪼개고 붙이고 활용할지 생각해보자!

 

코드

function solution(t, p) {
  let count = 0;
  for (let i = 0; i <= t.length - p.length; i++) {
    let subStr = t.substring(i, i + p.length);
      console.log(typeof subStr)
    if (parseInt(subStr) <= parseInt(p)) {
      count++;
    }
  }
  return count;
}
728x90