inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

4. 연속부분수열2(Two Pointers Algorithm)

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

310

hyuri

작성한 질문수 13

0

안녕하세요.

M = 5

let a=[6, 3, 1, 2, 3];

혹시 만약 처음부터 배열에 6이 들어가있다면 5보다 큰경우가 될텐데 그럼 rt-lt+1이 때문에 안될꺼같은데 이런경우 어떻게 될까요..?

javascript 코딩-테스트

답변 2

0

김태원

안녕하세요^^

6을 sum에 더하고 처리하는 과정에서 rt-lt+1 가 계산될때 rt=0, lt=1 이므로 rt-lt+1값은 0이 되어 answer에 0을 더하게 되므로 답은 정확하게 나옵니다.

아래와 같이 출력해보면 이해가 갈겁니다.

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);
      console.log(rt, lt, answer);
  }               
  return answer;
}

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

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
hyuri님, 연속부분수열 문제에서 ’M = 5’ 라고 했을 때 주어진 배열 ‘a=[6, 3, 1, 2, 3]’ 내에 6과 같이 M보다 큰 값이 포함되어 있는 경우, Two Pointers Algorithm을 사용하는 문제에서는 어떻게 처리되는지가 궁금하신 것 같습니다.

이런 경우 Two Pointers Algorithm은 기본적으로 두 개의 포인터인 ltrt를 배열의 시작 부분에 위치시킨 후, ‘rt’ 포인터를 이동시키면서 합이 ’M’을 초과하는 순간까지의 원소를 확인합니다. 만약 ‘rt’ 포인터가 가리키는 원소의 값 자체가 ’M’을 초과한다면, 그 원소를 포함하는 어떠한 연속 부분 수열도 ’M’이하의 합을 가질 수 없기 때문에, ‘rt’ 포인터를 오른쪽으로 한 칸 이동시키고, ‘lt’ 포인터 역시 ‘rt’ 포인터와 같은 위치로 옮깁니다. 이렇게 ‘lt’ 포인터를 조정함으로써, ’M’을 초과하는 큰 값이 들어올 경우 그 값을 제외하고 새로운 부분 수열의 합을 계산하게 됩니다.

예를 들어 a[0] = 6인 경우를 보면 다음과 같이 처리됩니다:
1. 초기 상태: lt = 0, rt = 0, 합(sum) = a[lt] = 6
2. 합이 M을 초과했으므로 rt를 1 증가시키고, ltrt와 같은 위치로 옮깁니다.
3. lt = 1, rt = 1, 이때부터 새로운 부분 수열에 대한 합을 다시 구합니다.

이후에 rt 포인터를 배열의 끝에 도달할 때까지 이동시키면서 부분 수열들의 합이 ’M’ 이하가 되는 경우의 수를 계산하면 됩니다. Two Pointers Algorithm은 이처럼 연속된 수열을 효과적으로 처리할 수 있는 방법 중 하나입니다.

더 궁금한 사항이 있다면 추가 질문 주시면 도와드리겠습니다.

continue를 사용하는 이유

0

79

2

정렬 가능 여부 판단하기

0

64

2

알고리즘 학습법 관련해서 질문드립니다.

0

86

1

코드 리뷰 부탁드립니다!

0

90

1

indexOf를 사용해서 풀어보았습니다 !!

0

68

1

저는 이런식으로 구현 해보았습니다 !!

0

64

1

12,13,14 강의 소리만 나오고 검은 화면입니다

0

100

3

반복문 최소화하고 indexOf 사용해서 풀어봤습니다

0

63

1

영상 보기 전에 직접 풀어봤습니다.

0

74

1

섹션1의 17번문제 이 풀이로 풀어도 될까요?

0

136

2

정규표현식으로 처리해도 상관없나요 ?

0

120

2

3칸씩 건너뛸 수 있을 경우

0

125

2

강의에 대해 질문있습니다.

0

135

2

Object와 Set을 이용해 풀어봤습니다.

0

117

2

이렇게 해도 되나요?

0

102

2

선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.

0

145

2

이렇게 풀어도 괜찮을까요?

0

138

1

이렇게 풀어도 괜찮을까요?

0

112

1

모든 아나그램 찾기에서 시간복잡도

0

98

1

코드리뷰 부탁드립니다.

0

130

1

for loop 탈출은 return 문으로 해도 되지 않나요?

0

133

1

투포인트알고리즘으로 풀어봤습니다.

0

142

0

코드 리뷰 부탁드립니다.

0

120

1

코드 맞게 작성한 거 아닌가여??

0

146

1