백준 2003번 수들의 합2 - python

김정훈·2023년 7월 3일
0

시간복잡도 문제 때문에 투 포인터 알고리즘과 누적 합 알고리즘을 같이 사용했다.

N, M = map(int, input().split())
numbers = list(map(int, input().split()))
answer = 0
prefix_sum = [0] * (N+1)

for i in range(1, N+1):
  prefix_sum[i] = prefix_sum[i-1] + numbers[i-1]

start = 1
end = 1

while end <= N:
  part_sum = prefix_sum[end] - prefix_sum[start-1]

  if part_sum < M:
    end += 1
  elif part_sum > M:
  # 단일 요소가 M보다 클 경우 두 개의 포인터를 같이 이동시켜줘야 함
    if start == end: 
      end += 1
    start += 1
  else:
    answer += 1
    end += 1
  
print(answer) 

0개의 댓글