투포인터(Two Pointer)
리스트에 순차적으로 접근해야 할 때 두개의 점의 위치를 기록하면서 처리하는 알고리즘
예제 (연속 부분 수열)
어떤 숫자들의 리스트가 주어질 때, 해당 리스트의 연속 수열의 합이 특정 값(m)을 가지는 경우의
public class p04 {
public static int solution(int n , int m, int[] arr){
int answer = 0;
int lt = 0;
int sum = 0;
for(int rt = 0; rt < n; rt++){
sum += arr[rt];
if(sum == m) answer ++;
while(sum >= m) {
lt++;
sum -= arr[lt];
if(sum == m) answer++;
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) arr[i] = sc.nextInt();
System.out.println(solution(n,m,arr));
}
}
Sliding Window
고정 사이즈의 윈도우가 이동하면서 윈도우 내에 있는 데이터를 이용해 문제를 풀이하는 알고리즘
교집합의 정보를 공유하고, 차이가 나는 양쪽 끝 원소만 갱신하는 방법
투 포인터 알고리즘과 연동하여 많이 쓴다.
source
https://butter-shower.tistory.com/226
https://ji-musclecode.tistory.com/37
'CS > 알고리즘' 카테고리의 다른 글
[Algorithm] 이분 탐색(Binary Search) (1) | 2023.03.12 |
---|---|
[Algorithm] 삽입 정렬(Insert Sort) (0) | 2023.03.12 |
[Algorithm] 거품 정렬 (Bubble Sort) (0) | 2023.03.12 |
[자료구조] 스택(Stack) 과 큐(Queue) (0) | 2023.03.12 |
[Algorithm] 선택 정렬(Selection Sort) (0) | 2023.03.12 |