슬라이딩윈도우

히니·2025년 10월 21일

algo

목록 보기
1/2

슬라이딩 윈도우란?

연속된 데이터에서 일정한 크기의 창을 설정하고 이 윈도우를 하나씩 이동 시키면서 데이터를 효율적으로 처리하는 기법이다.

문제

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를 제외하면 양끝을 혹은 한쪽끝과 연속된 수열로 카드를 뽑을 수 있어 원하는 조건을 충족해서 풀 수 있다.

profile
안녕하세요

0개의 댓글