Code note/자바스크립트 알고리즘 문제풀이
프로그래머스 자바스크립트 크기가 작은 부분 문자열
코드노트
2022. 12. 30. 21:38
let t = "3141592";
let p = "271";
숫자로 이루어진 문자열 t와 p가 주어질 때,
t에서 p와 길이가 같은 부분문자열 중에서,
이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를
return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우,
t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다.
이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
- 문제를 해석하면 쉬운 문제다. 간단하게 말하면!
- p의 길이는 3이다. t의 문자를 3개씩 순차적으로 자른다.
- 314, 141, 415, 159, 592
- 이 5가지 수를 p=272과 비교해서 작은 수를 count하면 끝나는 문제이다.
여기서 규칙 하나를 찾으면 된다. 우선 for문을 돌려야하기 때문에 몇번을 돌릴지 찾으려면
t의 길이 - p의 길이 + 1을 하면 된다.
- p의 길이인 3으로 t를 한번잘라내면 t의 길이인 7에서 3을 뺀 나머지 4가 된다.
- 순차적으로 하나씩 숫자를 만든다고 생각해보면 4번을 더 만들 수 있는 거다. 그럼 처음 만드는 수 1 그리고 4를 더하면 5가 된다.
let t = "3141592";
let p = "271";
function solution(t, p) {
var answer = 0;
let length = p.length;
let max = t.length + 1 - p.length;
let arr = [];
for (let i = 0; i < max; i++) {
arr.push(t.slice(i, length + i));
}
for (let i = 0; i < arr.length; i++) {
if (arr[i] <= p) answer++;
}
return answer;
}
console.log(solution(t, p)); // 2
- 우선 p의 길이를 담는다.
- 그리고 t.length - p.length + 1을 해준다. ( 이만큼 for문을 돌려서 만들 수 있는 수를 모두 만들어준다.)
- 첫번째 for문을 통해서 slice로 잘라내서 배열에 담아준다.
- 그리고 두번째 for문을 통해서 p의 수보다 낮은 수를 찾아서 count하면 끝!
오랜만에 코딩테스트를 해봤는데 잘 풀리는거 같다. 점점 레벨을 올리면서 하루? 이틀에 한문제씩은 꼭 풀어야겠다.