- 투 포인터를 이용해서 해결하는 문제였다.
코드1
①. 만약 구간의 합이 M이라면? → 시작, 끝 포인터의 값을 1씩 증가
②. 만약 구간의 합이 M보다 크다면? → 시작 포인터의 값을 1만큼 증가
③. 만약 구간의 합이 M보다 작다면? → 끝 포인터의 값을 1만큼 증가
코드2
①. 만약 구간의 합이 M이라면? → 끝 포인터의 값을 1만큼 증가
②. 만약 구간의 합이 M보다 크다면? → 시작 포인터의 값을 1만큼 증가
③. 만약 구간의 합이 M보다 작다면? → 끝 포인터의 값을 1만큼 증가
N, M = map(int, input().split())
A_li = list(map(int, input().split()))
start = 0
end = 0
cnt = 0
while True:
if end == len(A_li):
break
else:
if sum(A_li[start:end+1]) == M:
cnt += 1
start += 1
end += 1
elif sum(A_li[start:end+1]) > M:
start += 1
else:
end += 1
print(cnt)
N, M = map(int, input().split())
nums = list(map(int, input().split()))
left = 0
right = 1
cnt = 0
while right <= N and left <= right:
sum_nums = nums[left:right]
total = sum(sum_nums)
if total == M:
cnt += 1
right += 1
elif total < M:
right += 1
else:
left += 1
print(cnt)
PyPy3로 제출한 결과 메모리는 약 110000KB 정도 나오고 시간은 약 200ms 정도로 나왔다.