https://school.programmers.co.kr/learn/courses/30/lessons/147355
문자열 t를 돌면서 p의 길이만큼 문자열을 분리해주고, 분리된 문자열들을 p와 값 비교해야지. 쉽네!
그러나 쉽지만은 않았다.
function solution(t, p) {
let cnt=0;
let temp=''
let arr=[];
for(let i=0; i<t.length; i++){
temp+=t[i];
cnt+=1;
if(cnt===p.length){
arr.push(temp);
i=arr.length-1;
temp='';
cnt=0;
}
}
return arr.reduce((a ,c)=> Number(c)<=Number(p) ? a+=1 : a+=0, 0);
}
아이디어는 쉬웠으나 막상 구현하려고 하니 복잡한 점이 많았다.
우선 t를 순회하면서 temp에 t[i]를 붙여준 뒤 cnt를 증가시키고, cnt값이 p.length와 같아지면 arr에 temp을 추가하는 것까지는 순조로웠다.
그런데, 문자열로 구분지어주어야 할 지점이 t[i]의 다음 지점이 아니다.
t="3141592"이고 p의 길이가 3일 때 arr에는 "314", "141" ...이 담겼어야 하므로 i값을 재설정해줘야 했고 temp과 cnt도 초기화 해줘야 함.
그 덕분에 변수도 많아지고 코드도 좀 못생겨 보임^^
기분탓일까요.
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;
}
역시 기분탓이 아니었고...
왜 i 범위를 t.length-p.length로 했을까? 했는데 slice를 써줬기 때문이었다. 나도 slice를 생각하긴 했는데 왜 안썼지? ㅋㅋㅋㅋㅋ
하여튼.
그리고 난 Number로 형변환을 해줬지만 이 풀이에서는 문자열 앞에 '+'를 붙여서 숫자로 변환해주었다.