Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 안드로이드스튜디오
- 카카오코테
- 혼공파
- 혼공단
- 정보처리기사
- select
- 안드로이드
- 알고리즘
- doitandroid
- 자바
- CS
- join
- java
- 코틀린
- 정처기
- groupby
- 프로그래머스
- Kotlin
- Til
- Android
- 오블완
- 인프런
- 기술면접
- 코테
- MySQL
- 스터디
- SQL
- 티스토리챌린지
- 자료구조
- 혼공챌린지
Archives
- Today
- Total
Welcome! Everything is fine.
[Algorithm/Java] 슬라이딩 윈도우(Sliding Window) 본문
728x90
슬라이딩 윈도우(Sliding Window)란?
슬라이딩 윈도우(Sliding Window) 알고리즘은 배열이나 리스트에서 연속된 부분 구간(윈도우)을 효율적으로 탐색할 때 사용되는 알고리즘이다. 다음과 같은 상황에 자주 활용된다.
- 고정된 크기의 부분 배열을 찾는 문제
- 연속된 부분 구간의 최대값/최소값을 찾는 문제
- 특정 조건을 만족하는 부분 구간을 찾는 문제
슬라이딩 윈도우를 사용하면 고정된 크기의 윈도우를 정해 그 크기 안에서 데이터를 참색하거나 누적 계산을 수한다. 매번 전체 배열을 탐색하는 대신 윈도우를 이동하며 필요한 계산만 업데이트 하므로 시간 복잡도 O(N)이다.
배열에서 고정된 크기의 부분합 중 최대값을 구하는 예제를 보자.
public class SlidingWindowExample {
public static int maxSum(int[] arr, int k) {
int n = arr.length;
if (n < k) throw new IllegalArgumentException("윈도우 크기가 배열보다 큽니다.");
// 초기 윈도우 계산
int windowSum = 0;
for (int i = 0; i < k; i++) {
windowSum += arr[i];
}
int maxSum = windowSum;
// 윈도우 이동
for (int i = k; i < n; i++) {
windowSum += arr[i] - arr[i - k];
maxSum = Math.max(maxSum, windowSum);
}
return maxSum;
}
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
int k = 3;
System.out.println("최대합: " + maxSum(arr, k));
}
}
'Algorithm' 카테고리의 다른 글
[Algorithm/Study] 7주차 - 백트래킹 (1) | 2024.11.16 |
---|---|
[Algorithm/Study] 6주차 - 그래프 (10) | 2024.11.10 |
[Algorithm/Study] 5주차 - 집합 (0) | 2024.11.03 |
[Algorithm/Study] 4주차 - 트리 (0) | 2024.10.26 |
[Algorithm/Study] 3주차 - 해시 (0) | 2024.10.19 |