https://www.acmicpc.net/problem/2003
방법 1 : 구간합
n, m = map(int, input().split())
list = list(map(int, input().split()))
# 합배열 만들기
total = 0
sum_list = [0]
for i in range(len(list)):
total += list[i]
sum_list.append(total)
# 구가합을 빼면서 m이랑 같은게 있는지 확인
count = 0
for i in range(len(sum_list)):
for j in range(i+1, len(sum_list)):
if sum_list[j] - sum_list[i] == m:
count += 1
print(count)
방법2: 구간합 + 투포인터
n, m = map(int, input().split())
list = list(map(int, input().split()))
left = 0
right = 1
count = 0
while (left <= right and right <= n):
total = sum(arr[left:right]) # 구간합 계산
if (total < m):
right += 1
elif (total > m):
left += 1
else:
count += 1
right += 1
print(count)
'Algorithm > two pointer' 카테고리의 다른 글
[Python] BOJ 13422 도둑 (0) | 2023.12.06 |
---|---|
[Python] 백준 1806 부분합 (0) | 2023.11.30 |
[Python] 백준 1806 부분합 (0) | 2022.06.06 |
[Python] 백준 2230 수 고르기 (0) | 2022.06.06 |
댓글