코더 장군
강아지코더
코더 장군
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • 프론트엔드 (24)
      • react (9)
      • html5 * css3 (1)
      • Javascript (10)
    • 개발일기 (36)
      • 알고리즘 (27)
      • 블록체인 (3)
      • mongoDB (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 일기#심리상담
  • 백준
  • 비공개#일기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
코더 장군

강아지코더

연속부분수열1(Two Pointers Algorithm)
개발일기/알고리즘

연속부분수열1(Two Pointers Algorithm)

2022. 7. 29. 12:02

투포인트 알고리즘의 전형적인 문제 ( Two Pointers Algorithm )

: 배열 의 값을 연속으로 구해서 특정 값이 나오는 경우의 수를 구하는 문제 

            function solution2(m, arr){
                let answer=0;
                // lt는 sum의 값이 
                let mius=0;
                // 번위내에 있는걸 축적해서 더한 값
                let sum=0;
                for(let plus=0; plus<arr.length; plus++){
                    sum+=arr[plus];
                    if(sum===m) answer++;   
                    // 크거나 같을때 앞에 더한 값은 순으로 빼야합니다. 
                    // mius가 같이 때문에 같아도 빼야 합니다
                    while(sum>=m){
                        sum-=arr[mius++];
                        if(sum===m) answer++;       
                    }
                }    
                console.log(answer);    
                return answer;
            }
  • 하나씩(PLUS) 배열의 값을 더해서 누적한다(SUM). 
  • 누적된 값(SUM)이 특정 값(M)와 동일하면 카운터(ANSWER) 한다. 
  • while : 여기서 누적 된 값(SUM)이 특정값(M)과 크거나 동일해도(>=) 앞에 누적된 값에 더해진 순서대(MIUS)로 하나씩 빼준다.
  • 누적된 값이 특정값과 동일하면 또 카운트 한다. 

 

 

 //me 
            function solution(m , a2){
                let asewer ;
                const n = a2.length;
                let cnt = 0;
                for (let i = 0 ; i < n; i++) {
                   let arr = [];    
                   for (let p = 0; p < n - i; p++) {
                    let red = arr.reduce((p,c) => p + c, 0);
                    let el = a2[i+p];
                    if(red === m){
                        cnt++
                    }
                    arr.push(el)
                   }
                }
               return cnt
                
            };

오답노트

  • 시간복잡도에도 for문 2가지와 reduce를 사용해서  O(n*n*n)가 넘어간다.
  • 제대로 된 값이 안나온다 예제는 강의와 동일하게 나오지만 다른 작은 특정 값과 다른 배열를 쓰면 강의 코드와 값이 다르게 나온다. 
  • 원래 2이였던 수의 값을 배제 되어 버린다.

'개발일기 > 알고리즘' 카테고리의 다른 글

공통원소구하기(Two Pointers Algorithm)  (0) 2022.07.28
두 배열 합치기 ( 투 포인트 )  (0) 2022.07.27
백준 알고리즘 2588번 문제  (0) 2021.11.19
같은 숫자는 싫어  (0) 2021.11.11
3진법 뒤집기  (0) 2021.11.10
    '개발일기/알고리즘' 카테고리의 다른 글
    • 공통원소구하기(Two Pointers Algorithm)
    • 두 배열 합치기 ( 투 포인트 )
    • 백준 알고리즘 2588번 문제
    • 같은 숫자는 싫어
    코더 장군
    코더 장군
    강아지 키우고 있는 소소한 개발자 성장기를 쓰는 일기장입니다

    티스토리툴바