2024. 9. 5. 21:08ㆍ알고리즘
♠ 슬라이딩 윈도우
윈도우(특정 범위)가 있을 때 윈도우 내부 요소의 값을 이용하여 문제를 풀이하는 알고리즘. 고정된 범위를 탐색할 때 유용하며 중복으로 연산을 제거하면서 효율을 높일 수 있다. 한 칸씩 이동하기 때문에 공통된 부분은 유지하고 처음과 끝 원소만 갱신하여 유용하게 사용할 수 있다. 투 포인터와 비슷하지만, 슬라이딩 윈도우는 고정된 범위를 탐색하는 것이기 때문에 두 개의 포인터가 없어도 된다.
위의 배열에서 연속적인 4개 숫자의 합이 최대인 값을 구한다고 가정한다.
[1, 3, 2, 6] => 합: 12
[3, 2, 6, -1] => 합: 10
[2, 6, -1, 4] => 합: 11
[6, -1, 4, 1] => 합: 10
이렇게 계산을 하면 중복되는 부분이 생긴다. 중복을 줄이기 위해 처음과 끝 원소만 갱신하는 코드를 구성한다.
arr=list(map(int,input().split()))
total = sum(arr[:4])
for i in range(4, len(arr)-4+1):
total+=arr[i]
sum-=arr[i-4]
print(sum)
♠ 백준 알고리즘 12847번
주어진 날은 5개인데, 연속되는 3개 요소의 합 중 가장 큰 값을 출력하는 것이다. 슬라이딩 윈도우를 이용하여 아래와 같이 코드를 작성할 수 있다.
♠ 참고 자료
https://learning-e.tistory.com/36
[Algorithm] 슬라이딩 윈도우(Sliding Window) 알고리즘 with python
'슬라이딩 윈도우' 란 윈도우(특정 범위)가 있을때 윈도우 내부 요소의 값을 이용하여 문제를 풀이하는 알고리즘입니다. 아래 그림을 참조하면 조금 더 쉽게 이해하실 것입니다. 예를들어 [1,3,2,6
learning-e.tistory.com
[알고리즘] 슬라이딩 윈도우(Sliding window), 투 포인터(Two pointer)
슬라이딩 윈도우는 일정한 길이의 범위를 이동하여 조건에 맞는 값을 찾는 알고리즘이다. 한 칸씩 이동 하기 때문에 공통된 부분은 유지하고 처음과 끝 원소만 갱신하여 유용하게 사용할 수 있
velog.io
'알고리즘' 카테고리의 다른 글
데이크스트라 vs 플로이드-워셜 (0) | 2024.09.07 |
---|---|
BFS(너비우선탐색) vs DFS(깊이우선탐색) (0) | 2024.09.06 |
플로이드 워셜 알고리즘(Floyd Warshall Algorithm, 백준 알고리즘 2458번) (0) | 2024.08.21 |
데이크스트라 알고리즘(백준 알고리즘 13549번) (0) | 2024.08.12 |
유니온 파인드/분리집합 알고리즘(백준알고리즘 1043번) (0) | 2024.07.25 |