문자열로 주어진 값을 이용해 반복을 돌아야 하겠는데? -> split 메서드 사용
순회를 돌면서 특정 부분만 추출해내서 비교를 하면 쉽지 않을까? 그런 메서드가 무엇이 있지 splice? slice => 얕은 복사를 통한 배열을 반환해주는 slice 메서드를 사용
이후론 그저 생각의 영역이였기에 나름 쉽게 로직을 구성하게 되었다. 그러나!
삼항연산자의 실행 부분의 p + 1부분을 처음엔 null로 주었다가 null의 값을 비교하게 되니 NaN값이 나오게되고 그렇게되어 aa <= Number(p)의 연산이 정상적으로 작동하지 않게되어 살짝 골머리를 앓다 해결하게 됬음.
주석부분은 처음에 로직을 작성한 부분이고 이후에 내가 줄인 부분을 적어놓은 것.
function solution(t, p) {
// t,p = int[]
// 반복문 중첩
let answer = 0;
const tArray = t.split('')
// tArray.map((item,idx) => {
// const aa = idx <= tArray.length-p.length ? Number(tArray.slice(idx,idx + p.length).join('')) :p + 1
// return aa <= Number(p) ? answer += 1 : null
// })
tArray.map((item,idx) => (idx <= tArray.length - p.length ? Number(tArray.slice(idx,idx + p.length).join('')) : p+ 1) <= Number(p) ? answer += 1 : null)
return 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;
}
고차함수의 사용을 연습하기위해 최대한 for문이 아닌 함수를 사용하여 푸려고 노력하고있기에 for문을 써도는 되지만 지양하고있다.
위의 코드를 보니 가시성이 뛰어나 나중에 다른 분들과 협업을 하게 된다면 위와같은 코드를 작성할 듯 싶다라는 생각이 들면서 아..이번엔 로직이 매우 유사하다!라는 뿌듯함이 있다.
1단계에서 신나서 방방대는 중 ㅋ;;