프로그래머스 크기가 작은 부분문자열 자바스크립트

Chaeyeon Lee·2023년 6월 14일
0


https://school.programmers.co.kr/learn/courses/30/lessons/147355

🔅 1. 아이디어

문자열 t를 돌면서 p의 길이만큼 문자열을 분리해주고, 분리된 문자열들을 p와 값 비교해야지. 쉽네!

그러나 쉽지만은 않았다.

🧑‍💻 2. 내 코드

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도 초기화 해줘야 함.
그 덕분에 변수도 많아지고 코드도 좀 못생겨 보임^^
기분탓일까요.

😎 3. 다른 사람의 풀이

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로 형변환을 해줬지만 이 풀이에서는 문자열 앞에 '+'를 붙여서 숫자로 변환해주었다.

profile
프론트엔드 개발자 지망생

0개의 댓글