슬라이딩 윈도우 문제. k가 주어진 세 가지 경우일 때를 각각 구현하면 쉽게 풀린다. 시간복잡도는 O(N).
풀이 코드
class Solution:
def decrypt(self, code: List[int], k: int) -> List[int]:
n = len(code)
result = [0]*n
if k == 0 :
return result
if k > 0 :
result[0] = sum(code[1:k+1])
for i in range(1, n) :
result[i] = result[i-1] - code[i] + code[(i+k)%n]
else :
result[0] = sum(code[-1:k-1:-1])
for i in range(1, n) :
result[-i] = result[-i+1] - code[-i] + code[-(i-k)%n]
return result