c++ 자료구조, 알고리즘
투 포인터
무한 나무
2024. 3. 28. 19:37
더해서 목표 값이 되는 연속된 범위의 경우의 수
- 더 할 범위를 표시하는 left/right를 준비한다. (인덱스 값 저장, 0부터 시작)
- left~right 까지 더해서 목표값보다 작으면 right+1 한다.
- 목표값보다 크면 left+1 한다.
- 목표값과 같아지면 카운트하고, left+1한다.
(제한사항 : 모든 수는 양의 정수, 목표도 양의 정수)
vector<int> seg = { 1,0,2,1,3,2,4,1,8,4,9,3,3,4,2,6,7,2,1,1,3,5 };
int goal = 12;
int answer = 0;
int left = 0, right = 0, sum=1;
while (right < seg.size())
{
if (sum == goal)
{
answer++;
sum -= seg[left++];
}
else if (sum < goal)
{
++right;
if(right< seg.size())
sum+=seg[right];
}
else
sum -= seg[left++];
}
cout << "투 포인터 : " << answer << endl;