728x90
반응형
목차
투 포인터 알고리즘 정의
- 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘
- 정렬되어있는 두 리스트의 합집합에도 사용됨. 병합정렬(merge sort)의 counquer 영역의 기초가 되기도 합니다.
대표 예제
https://www.acmicpc.net/problem/2003
투 포인터 알고리즘 설명
크게 4가지 절차를 알면됩니다.
- 목표값보다 작으면 종착점을 증가시킨다.
- 목표값보다 크면 시작점을 증가시킨다.
- 종착점이 끝에 도달하면 목표값에 상관없이 시작점을 증가시킨다.
- 시작점이 끝에 도달하면 종료한다.
목표값 = 2라고 해봅시다.
sum: 0 / 시작점: 0 / 종착점: 0
sum: 1 / 시작점: 0 / 종착점: 1
sum: 2 / 시작점: 0 / 종착점: 2 / cnt++
sum: 1 / 시작점: 1 / 종착점: 2
sum: 2 / 시작점: 1 / 종착점: 3 / cnt++
sum: 1 / 시작점: 2 / 종착점: 3
sum: 2 / 시작점: 2 / 종착점: 4 / cnt++
sum: 1 / 시작점: 3 / 종착점: 4
sum: 0 / 시작점: 4 / 종착점: 4
cnt =3
코드구현
#include <iostream>
#include <vector>
using namespace std;
vector<int> arr;
int main() {
int N, M, i, num, cnt =0, s=0, e=0, sum=0;
cin >> N >> M;
for (i = 0; i < N; i++) {
cin >> num;
arr.push_back(num);
}
while (s < N) {
if (sum < M) {
if (e != N ) { // 종착점이 끝에 도달 시
sum += arr[e];
e++;
}
else { // 합이 목표값보다 작은 경우 종착점 증가
sum -= arr[s];
s++;
}
}
else { //합이 목표값보다 크거나 같은 경우 시작점 증가
sum -= arr[s];
s++;
}
if (sum == M) //합이 목표값인 경우 카운트 증가
cnt++;
}
cout << cnt;
}
참고
https://m.blog.naver.com/kks227/220795165570
반응형
'알고리즘' 카테고리의 다른 글
[코딩 테스트] C++ 코테용 문자열 팁 (0) | 2024.03.28 |
---|---|
[알고리즘] 순열과 조합 c++ 구현 (0) | 2024.03.24 |
[정렬 알고리즘] 버블, 선택, 삽입 정렬 c++ 구현 (1) | 2024.02.27 |
[Union find] c++ 구현 및 설명 (0) | 2024.02.22 |
[최소 힙] c++ 구현 및 설명 (0) | 2024.02.14 |