코딩테스트/JavaScript

[코딩테스트] 연속 부분수열 2

CODE_PLAN 2023. 12. 31. 18:22

나의 풀이 

   function solution(m, arr) {
            let answer = 0, lt = 0, sum = 0;
            for (let lt = 0; lt < arr.length; lt++) {
                if (arr[lt] <= m) answer++;
            }
            for (let rt = 0; rt < arr.length; rt++) {
                sum += arr[rt];
                console.log('sum=?' + sum)
                if (sum <= m) answer++;
                while (sum > m) {
                    sum -= arr[lt++];
                    if (sum <= m) answer++;
                }
            }
            return answer;
        }


 // 1, 3 ,1 // 1 3,  3 1  //  1 1

        let a = [1, 3, 1];
        console.log(solution(5, a));
    </script>

나는 위와같이 풀었는데 위와같이 풀어도 코드가 잘 돌아가는것을 확인할수있다.

 

모범 답안

          function solution(m, arr){
                let answer=0, sum=0, lt=0;
                for(let rt=0; rt<arr.length; rt++){
                    sum+=arr[rt];
                    while(sum>m){
                        sum-=arr[lt++];
                    }
                    answer+=(rt-lt+1);
                }               
                return answer;
            }
            
            let a=[1, 3, 1, 2, 3];
            console.log(solution(5, a));

핵심 포인트1) answer += (rt-lt+1); 를 작성하는것이 핵심  ( 하나부터 경우의수를 3개만 작성해도 규칙을 알수있다)

2) while 문안에서 특정 조건동안 계속 반복되게 사용