윤일무이
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 크기가 작은 부분 문자열 본문
문제 및 제한사항
숫자로 이루어진 문자열 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;
}'⚙️ 코딩테스트' 카테고리의 다른 글
| [JavaScript] 프로그래머스 코딩테스트 레벨 1 : 숫자 문자열과 영단어 (0) | 2023.05.08 |
|---|---|
| [JavaScript] 프로그래머스 코딩테스트 레벨 1 : 문자열 내 마음대로 정렬하기 (0) | 2023.05.08 |
| [JavaScript] 프로그래머스 코딩테스트 레벨 1 : 두 개 뽑아서 더하기 (0) | 2023.04.19 |
| [JavaScript] 프로그래머스 코딩테스트 레벨 1 : K번째 수 (0) | 2023.04.19 |
| [JavaScript] 프로그래머스 코딩테스트 레벨 1 : 숫자 문자열과 영단어 (0) | 2023.04.18 |