예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
t | p | result |
---|---|---|
"3141592" | "271" | 2 |
"500220839878" | "7" | 8 |
"10203" | "15" | 3 |
function solution(t, p) {
var answer = 0;
let arr = [];
let length = t.length-p.length;
for (let i = 0; i <= length; i++) {
let val = t.substr(i, p.length);
arr.push(val);
}
arr.map((v, i) => (Number(v) <= Number(p) ? answer++ : 0));
return answer;
}
내가 푼 풀이방법은 일단 t.length를 p.length 만큼 빼줘서 첫번째 입출력을 예시로 들면 t의 length 가 7이고 p의 length가 3이다 새로운 length 는 4일것이다. for문은 4보다 커지면 for loop 이 끝날것이다.i는 0부터 시작한다 여기서 str.substr 이라는 method를 사용하면 해당(i,v) i부터 v까지의 문자열을 가져온다. 그래서 0부터 p의 length 만큼을 가져오는 val를 만들었다. 그렇게 되면 i는 for문이 돌때마다 1씩 증가하므로 314,141,415,159,592 가 val가 되고 그걸 새로운 arr 에 푸쉬를 한다음에 map 을 돌려서 문자열인 arr 를 Number로 치환해준다음 작거나 같으면 answer 을 하나씩 증가하게끔 해서 풀었다.
function solution(t, p) {
let count = 0;
for(let i=0; i<=t.length-p.length; i++) {
let value = t.slice(i, i+p.length);
if(+p >= +value) count++;
}
return count;
}
나랑 접근 방식은 같은 풀이지만 훨씬 가독성이 좋아보인다. method 사용하는것도 별로 없고,
for문에서 cnt 까지 처리를 한게 인상 깊었다.
해당 풀이는 for문을 돌려서 t.length와 p의 length 를 뺀다음 똑같이 1씩 증가시키고 ,
val에다가 t.slice(i,i+p.length) i부터 i+p.length 만큼 잘라오기를 하면 1씩 증가하게 되면서 종료시점의 인덱스도 1씩 증가하기 때문에 3개씩 가져올 수 있다.
그리고 if문을 통해서 문자열에 +를 하면 암시적 형 변환으로 javascript 에선 문자에 +를 하게되면 알아서 넘버로 해석을 하게 되서 문자열에 +를 해준거같다. P 가 value보다 크거나 같으면 cnt 를 증가시킴으로 코드가 종료되는 함수이다.