1. 문제 설명
- 입력
- n: n개로 된 수열
- m: 합
- 출력
- N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수
2. 코드
solution1.py
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
ary = list(map(int,input().split()))
hab = 0
end = 0
result = 0
# start를 차례대로 증가시키며 반복
for start in range(n):
#end를 가능한 만큼 오른쪽으로 이동시키기
while hab < m and end < n:
hab += ary[end]
end+=1
if hab == m:
result+=1
#부분합이 m과 같거나 클 때, start를 오른쪽으로 이동
hab -= ary[start]
print(result)
3. 회고
- 구간의 합 < m : end 오른쪽으로 이동 (합을 늘림)
- 구간의 합 > m : start 오른쪽으로 이동 (합을 줄임)
- 구간의 합 = m : 카운트 증가
4. 참고
'Algorithm > 백준' 카테고리의 다른 글
[백준] #2470 두 용액 (Python) (0) | 2022.02.19 |
---|---|
[백준] #2110 공유기 설치 (Python) (0) | 2022.01.29 |
[백준] #2805 나무 자르기 (Python) (0) | 2022.01.26 |
[백준] #14502 연구소 (Python) (0) | 2022.01.21 |
[백준] #1260 DFS와 BFS (Python) (0) | 2022.01.19 |