슬라이딩 윈도우란?
연속된 데이터에서 일정한 크기의 창을 설정하고 이 윈도우를 하나씩 이동 시키면서 데이터를 효율적으로 처리하는 기법이다.
문제
N개의 카드가 있고, 양쪽 끝 왼쪽 끝카드를 둘 중 하나 가져갈 수 있다. 양끝에서 가져가는 방식으로 k개의 카드를 가져갈 수 있다. 일렬로 놓여진 각 카드의 숫자가 매개변수 nums로 주어지고 현수가 가져갈 수 있는 카드의 갯수가 k개 주어지면 최대점수를 반환하는 프로그램을 작성해라
def solution(nums:list[int],k:int):
total = sum(nums)
n = len(nums)
picked = n-k
answer = 0
for i in range(n):
slice_window =nums[i:i+picked]
_sum = sum(slice_window)
if total - _sum > answer and len(slice_window) == picked:
answer = total- _sum
print(answer)
return answer
slice_window =nums[i:i+picked] 가 슬라이딩 윈도우가 되어서 각 nums를 순회한다. 해당 합이 최소일 경우 총합- sum(slice_window)가 최대가 된다.
해당 방식으로 풀면 slice_window를 제외하면 양끝을 혹은 한쪽끝과 연속된 수열로 카드를 뽑을 수 있어 원하는 조건을 충족해서 풀 수 있다.