강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

묘다님의 프로필 이미지
묘다

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

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

안녕하세요 강사님. 이 풀이도 맞을까요?

작성

·

157

0

function solution(num, a) {
  let p1 = 0;
  let p2 = 0;
  let sum = 0;
  let result = 0;

  for (let i = 0; i < a.length; i++) {
    sum += a[p2++];

    if (sum > num) {
      while (sum > num) {
        sum -= a[p1++];
      }
    }

    if (sum === num) {
      result++;
    }
  }

  return result;
}

let a = [1, 2, 1, 3, 1, 1, 1, 2];
console.log(solution(6, a));

for문 시작할떄 p1포인터 대신에 let i =0로 해봤는데 답이 나오는거같긴합니다

퀴즈

투 포인터 또는 슬라이딩 윈도우 기법이 중첩 반복문보다 효율적인 주된 이유는 무엇일까요?

더 적은 메모리를 사용해서일까요?

코드가 더 짧아져서일까요?

대부분의 경우 O(N) 시간 복잡도를 달성해서일까요?

입력 데이터 크기에 영향을 받지 않아서일까요?

답변 1

1

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

잘 하신 코드입니다.

if (sum > num) {
      while (sum > num) {
        sum -= a[p1++];
      }
    }

 

위 부분을 

while (sum > num) {
        sum -= a[p1++];
      }

if 문을 빼고 위에 같이만 해도 됩니다.

 

 

묘다님의 프로필 이미지
묘다

작성한 질문수

질문하기