Two Pointer (투 포인터)
- 두 개의 포인터를 사용하여 문자열, 배열, List에서 원하는 값을 찾는 선형 구조 알고리즘
- 포인터 배치 방법
--> 같은 방향에서 시작 : 첫 번째 원소에 둘 다 배치
--> 서로 다른 방향에서 시작 : 첫 번째 원소와 마지막 원소에 배치
- 한 번의 반복으로 모든 요소를 처리하기에 효율적이며 다중 for문의 복잡도를 좀 더 선형적으로 풀 수 있음
알고리즘 복잡도 : O(n)
투 포인터의 종류
1. 고정 길이 슬라이딩 윈도우
- 고정된 길이의 윈도우를 사용하여 배열이나 리스트를 탐색
- 윈도우의 크기를 일정하게 유지하면서 왼쪽 포인터와 오른쪽 포인터를 이동시키며 필요한 계산을 수행
- 부분 배열의 합이나 평균을 계산하는 등의 문제에 사용
2. 가변 길이 슬라이딩 윈도우
- 가변 길이의 윈도우를 사용하여 배열이나 리스트를 탐색
- 윈도우의 크기를 필요에 따라 변경하면서 왼쪽 포인터와 오른쪽 포인터를 이동시키며 필요한 계산을 수행
- 최소 길이 부분 배열이나 최대 길이 부분 배열을 찾는 등의 문제에 사용
3. 두 포인터의 합과 차
- 배열이나 리스트에서 두 개의 포인터를 사용하여 합이나 차를 계산하는 문제를 해결
- 보통 왼쪽 포인터와 오른쪽 포인터를 사용하며, 이들은 각각 탐색 범위의 시작과 끝을 가리킴
- 두 요소의 합이나 차가 주어진 값과 일치하는지 확인하는 등의 문제에 사용
//투포인터 사용예제
public class twoPointer {
public static int[] twoPointers(int[] arr, int target){
int p1 = 0;
int p2 = 0;
int sum = 0;
int[] result = {-1, -1};
while (true){
if (sum > target){
sum -= arr[p1++];
}else if (p2 == arr.length){
break;
}else {
sum += arr[p2++];
}
if (sum == target){
result[0] = p1;
result[1] = p2 - 1;
break;
}
}
return result;
}
public static void main(String[] args) {
int[] arr = {1, 2, 5, 3, 7, 2, 4, 3, 2};
System.out.println(Arrays.toString(twoPointers(arr, 9)));
System.out.println(Arrays.toString(twoPointers(arr, 14)));
}
}
참고link
https://adjh54.tistory.com/398
[Java/알고리즘] 투 포인터 알고리즘(Two Pointer Algorithm) 이해하기 -2: 문제로 이해하기
해당 글에서는 백준 문제를 통해 투 포인터 알고리즘의 이해를 돕기 위해 작성한 글입니다. 💡 [참고] 투 포인터 알고리즘에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다. [Java/알고
adjh54.tistory.com
[알고리즘/JAVA] 투포인터 알고리즘
투포인터 알고리즘을 소개하고자 한다. 코딩 테스트에 많이 나오는 유형이라서 알면 매우 좋을 것 같다. 그럼 고고~ 투포인터 알고리즘 투포인터는 선형 시간으로 알고리즘을 풀 수 있게 만들어
gaybee.tistory.com
[알고리즘] 투 포인터(Two Pointers)란?
투 포인터(Two Pointers) 투 포인터는 말 그대로 두 개의 포인터를 사용하여 문자열, 배열, List에서 원하는 값을 찾는 것 입니다. 투 포인터를 활용하기 위한 조건은 주어진 배열에서 연속된(정렬이
hstory0208.tistory.com
https://colabear754.tistory.com/69
투 포인터(Two Pointer) with Kotlin
투 포인터(Two Pointer) 투 포인터(Two Pointer) 알고리즘은 배열이나 리스트에서 두 개의 점을 이동시키면서 원하는 결과를 얻어내는 알고리즘이다. 예를 들어 부분합을 구하는 문제에서 배열과 부분
colabear754.tistory.com
'Study for Backend > Algorithm' 카테고리의 다른 글
[Algorithm 기초연습] 그리디 알고리즘 - 거스름 돈 문제 (0) | 2024.03.03 |
---|---|
[Algorithm 기초] 그리디 알고리즘 (0) | 2024.03.03 |
[Algoritm 기초연습] 백준 1920 수 찾기 (0) | 2024.02.25 |
[Algorithm 기초] 이진 탐색 (0) | 2024.02.24 |
[Algorithm 기초] 기수 정렬, 계수 정렬, 셀 정렬 (0) | 2024.02.22 |