티스토리 뷰
투 포인터 (Two Pointers)
투 포인터 알고리즘은 1차원 배열에서 두 개의 포인터를 조작하여 원하는 결과를 얻어내는 알고리즘입니다.
🎈 예제
길이가 n
인 1차원 배열이 있을 때, 그 부분 배열의 원소의 합이 m
이 되는 경우의 수를 알고 싶습니다.
모든 부분 배열을 탐색한다면 시간복잡도는 O(n^2)이 되겠습니다.
그러나 투 포인터를 사용하면 O(n) 에 문제를 해결할 수 있습니다.
- 포인터 2개를 만듭니다.
start
,end
라고 하겠습니다. - 처음 시작할 때는
start, end = 0
입니다. start <= end
는 항상 성립합니다.
투 포인터의 동작 과정은 이렇습니다.start < n
인 동안 반복
- 현재 부분합이
m
이상이거나end == n
인 경우
start
를 오른쪽으로 한 칸 이동 - 그렇지 않다면
end
를 오른쪽으로 한 칸 이동 - 현재 부분합이
m
이라면 결과 count++
🎈 Java 코드
int start = 0;
int end = 0;
int result = 0;
int sum = 0;
while (start < end) {
if (sum >= m) {
start++; // start를 오른쪽으로 옮김
sum -= arr[start];
}
else if (end == n) {
break;
}
else {
end++; // end를 오른쪽으로 옮김
sum += arr[end];
}
if (sum == m) {
result++;
}
}
🎈 그림으로 보는 예제
그림으로 보면 위와 같을 것입니다 ^_^
'알고리즘' 카테고리의 다른 글
다음 순열 (Next Permutation) Java (0) | 2022.03.31 |
---|
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Sequence
- 중위순회
- 빌더패턴
- BuilderPattern
- 여행가자
- 정적팩터리메서드
- 이진트리
- BAEKJOON
- 시퀀스
- 전위순회
- 프로그래머스
- Java
- ORA-02289
- 트리순회
- greedy
- effectivejava
- 유니온파인드
- 탐욕법
- 백준1976
- 분리집합
- 이펙티브자바
- 알고리즘
- deque
- 생성자
- 자바
- 투포인터 #알고리즘
- 후위순회
- 시퀀스가존재하지않습니다
- 백준
- 스레드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함