t = int(input())
for i in range(t):
# n 집의 개수
# m 연속된 집의 개수
# k 최소 돈의 양 (k를 넘으면 안됨)
n, m, k = map(int, input().split())
lst = list(map(int, input().split()))
if m != n:
for i in range(m-1):
lst.append(lst[i])
sum_lst = [0]
total = 0
for i in lst:
total += i
sum_lst.append(total)
start = 0
end = m
count = 0
while end != len(sum_lst):
if sum_lst[end] - sum_lst[start] < k:
count += 1
start += 1
end += 1
print(count)
- 집이 원형을 이루기 때문에 m != n 인 경우에 m까지의 값을 다시 리스트에 넣어준다.
- 이후 누적합을 구한 다음 투포인터로 누적합이 k보다 작은 구간을 찾는다
'Algorithm > two pointer' 카테고리의 다른 글
[Python] 백준 1806 부분합 (0) | 2023.11.30 |
---|---|
[BOJ] 2003번 수들의 합2 - 구간합, 투포인터 (0) | 2023.09.22 |
[Python] 백준 1806 부분합 (0) | 2022.06.06 |
[Python] 백준 2230 수 고르기 (0) | 2022.06.06 |
댓글