JAVASCRIPT/코딩테스트

프로그래머스 레벨1 - 크기가 작은 부분 문자열(filter함수 사용)(JAVASCRIPT)

진짠 2023. 1. 3. 13:46
728x90

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

문제

p의 문자열 길이만큼 t를 잘라야 한다는 생각이 처음으로 들었고,
그 다음으로 자른 값들을 p와 비교하여야겠다는 생각을 하였다.

 

제한사항

특별히 눈여겨 볼것은 없는 듯 하다.

 

중복된 값은 카운트하지 않는다던가, 앞이 0인 값들의 조건들을 따로 처리해야하나 하는 생각에 걱정이 앞섰지만 결과적으로 따로 처리해준 부분은 없었다.

 

function solution(t, p) {
    var answer = [];
    for(var i=0;i<t.length-p.length+1;i++) {
      answer.push(t.substring(i, p.length+i));   
    }
    answer = answer.filter((x) => x <= p);
    return answer.length;
}

내가 작성한 코드

 

for문을 먼저 돌린다. 

'for(var i=0;i<t.length;i++)' 로 처음에 for문을 짜니까 문자열의 끝부분이 p의 길이만큼 잘리지 않는 오류가 발생했다.

그래서 p의 길이+1만큼을 빼서 잉여 값들을 제해주었다.

answer 배열에 값을 넣어주고 filter함수를 통해 p와 비교하여 값이 작거나 같은 값들만 뽑았다.

마지막으로 answer의 길이를 return 시켰다.

 

비교

굳이 배열에 담은 뒤 filter함수를 사용해 비교할 필요 없이 for문안에서 문자열을 자른뒤 비교 후 카운팅하는 방법이 있었다.

if(t.substr(i,p.length) <= p){
    answer++;
}

성능개선을 위해 필요할 듯.

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

728x90