강의

멘토링

로드맵

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

frenchkebab님의 프로필 이미지
frenchkebab

작성한 질문수

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

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

선생님이 올려주신 코드에 대해 질문이 있습니다!

작성

·

109

0

function solution(marr) {
  let answer = 0,
    l = 0,
    sum = 0;
  for (let r = 0r < arr.lengthr++) {
    sum += arr[r];
    if (sum === manswer++;
    while (sum >= m) {
      sum -= arr[l++];
      if (sum === manswer++;
    }
  }
  return answer;
}

이게 선생님 올려주신 코드이구요,

for (let r = 0r < arr.lengthr++) {
  sum += arr[r];
  while (sum >= m) {
    if (sum === manswer++;
    sum -= arr[l++];
  }
}

for문 안을 이렇게 수정해도 코드가 잘 동작하더라구요

굳이 while문 위에 sum === m 코드를 하나 더 중복해서 빼 주어야하는 이유가 있을까요?

퀴즈

45%나 틀려요. 한번 도전해보세요!

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

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

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

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

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

답변 1

0

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

안녕하세요^^

네 위에처럼 해도 되네요. 아마 설명하기 쉬워서 그렇게 하지 않았나 생각되네요.

frenchkebab님의 프로필 이미지
frenchkebab

작성한 질문수

질문하기