슬라이딩 윈도우

less than 1 minute read

간단하지만 유용한 스킬이다. 만약 가능하다면 O(n^2) 알고리즘을 O(n)으로 처리할 수도 있다. 문제 내에서 보조적으로 사용하면 유용한 경우가 많으니 사용가능성을 염두에 두자.

#include <stdio.h>  
  
int getSum(int index) {  
	int sum = 0;  
	for (int x = 0; x < 4; x++) {  
		sum += vect[x + index];  
	}  
	return sum;  
}  
  
int main(void) {  
	int sum = getSum(0);  
	int max = 0;  
  
	for (int x = 0; x <= 5; x++) {  
		if (sum > max) max = sum;  
		if (x == 5) break;  
  
		sum += vect[x + 4];  
		sum -= vect[x];  
	}  
  
	printf("%d", max);  
	return 0;  
}  

네트워크와 데이터 통신과 같은 과목을 들어보면, 실제로 패킷 유효성 체크를 하면서 이런 윈도우를 통해 진행하는 것을 볼 수 있는데 윈도우라는 기법이 일반적으로 많이 쓰인다고 생각하면 될 것 같다.

내용은 코드를 보면 쉽게 알 수 있을 것이다. 윈도우가 지나갈때마다 하나의 요소가 빠지고 하나의 요소를 더하는 방식으로 쭉 지나간다. 따라서 for문 하나로 처리가 가능하다.