안녕하세요 :)
오랜만에 백준 문제를 풀어보았습니다...
https://www.acmicpc.net/problem/2003
풀이
i번째 수부터 j번째 합을 구하는 투포인터 문제였습니다.
문제를 크게 3가지로 분류하여 풀었습니다.1) sum > m 일 때:
현재 구한 합이 m을 초과하므로, i번째 값인 a[i]를 sum에서 빼주고 i++ 해줘서 현재 sum을 수정해줍니다.2) sum < m 일 때:
현재 구한 합이 m보다 작으므로, j++ 해주고 a[j]를 sum에 더해줍니다. 만약 j가 길이 n보다 크게되면 break 해줍니다.3) sum = m 일 때:
답이 되는 경우 이므로, ans++ 해주고 i++ 해서 이동시켜 그 다음 합구간을 구해줍니다.
# https://www.acmicpc.net/problem/2003
def solution(n, m, a):
i, j = 0, 0
ans = 0
a_sum = a[i]
while i < n:
if a_sum > m:
a_sum -= a[i]
i += 1
elif a_sum < m:
if j + 1 < n:
j += 1
a_sum += a[j]
else:
break
else:
ans += 1
a_sum -= a[i]
i += 1
return ans
if __name__ == '__main__':
n, m = map(int, input().split())
a = list(map(int, input().split()))
print(solution(n, m, a))