투 포인터란?
두 개의 포인터를 사용하여 문자열, 배열, List에서 원하는 값을 찾는 것
투 포인터의 특징
1. 투 포인터 알고리즘은 선형시간 복잡도[ O(n) ]를 가지므로 효율적.
2. 한 번의 반복으로 모든 요소를 처리하기에 효율적.
활용 예시
주어진 정수 배열에서 두 개의 숫자를 선택하여 합이 특정한 값(target)을 갖는지 확인하는 문제
문제 : 갯수가 5개인 배열에서 구간합이 5인 구간을 찾기
1. 5개의 배열
2. start, end는 배열의 시작점에서 동시에 출발
S=0, e=0, sum=1, cnt=0
3. e를 한칸씩 움직여 S~e의 구간합을 구한다.
4. 구간합이 6이므로 찾고자하는 5를 넘긴다. 따라서 값을 줄이기 위해
시작값인 S를 한칸 올린다.
5를 찾았으므로 cnt를 1증가시킨다.
5. 위의 작업을 반복 후 최종
int end = 0;
int sum = 0; // 부분 합
int cnt = 0; // 개수
// i 가 start
for (int i = 0; i < n; i++) {
while (end < n && sum < m) {
sum += arr[end];
end++;
}
if (sum == m) {
cnt++;
}
sum -= arr[i];
}
[ 알고리즘 ] 너비 우선 탐색 (BFS) (0) | 2024.04.08 |
---|---|
[ 알고리즘 ] 버블정렬 (Bubble Sort) (0) | 2024.03.23 |
[ 알고리즘 ] 깊이 우선 탐색 (DFS) (0) | 2024.03.20 |
[ 알고리즘 ] 퀵 정렬 (Quick Sort) (1) | 2024.03.18 |
[ 알고리즘 ] 구간 합 (Prefix Sum) (0) | 2024.03.09 |