개발 연습장/백준 문제풀이

[파이썬, Python] 백준 2003: 수들의 합 2

LooanCheong 2023. 5. 15. 11:46
반응형

문제

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값을 출력해주면 된다.

반응형