반응형
문제
https://www.acmicpc.net/problem/2003
2003번: 수들의 합 2
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
www.acmicpc.net
코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
num = list(map(int, input().split()))
cnt = 0
inter_sum = 0
end = 0
for start in range(n):
while inter_sum < m and end < n:
inter_sum += num[end]
end += 1
if inter_sum == m:
cnt += 1
inter_sum -= num[start]
print(cnt)
설명
우선 n, m, num으로 주어진 입력값을 받아준다.
그리고 정답을 카운트할 cnt,
중간 합계를 계산할 inter_sum,
포인터의 끝 값을 받아줄 end를 만들어준다.
n의 값만큼 start를 옮겨주는데,
이때 계산의 편의성을 위해 inter_sum이 목푯 값인 m보다 작고 끝 값이 n보다 작을 때,
inter_sum의 값에 num의 end 인덱스 값을 더해주고 end 값을 1 증가시킨다.
중간 합계 값이 목표한 값과 같으면 cnt를 1 증가시키고,
반복문의 마지막에 start값의 인덱스에 해당하는 수를 빼주어 다음 범위를 계산한다.
이후 cnt값을 출력해주면 된다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 1302: 베스트셀러 (0) | 2023.05.17 |
---|---|
[파이썬, Python] 백준 18258: 큐2 (2) | 2023.05.16 |
[파이썬, Python] 백준 2822: 점수 계산 (0) | 2023.05.12 |
[파이썬, Python] 백준 11728: 배열 합치기 (0) | 2023.05.09 |
[파이썬, Python] 백준 7576: 토마토 (0) | 2023.05.08 |