Algorithm PS/BOJ
[BOJ] 2003 / 수들의 합 2 / Python 파이썬
migrationArc
2021. 8. 9. 13:12
[BOJ] 2003 / 수들의 합 2 / Python 파이썬
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
풀이
배열의 두 위치의 index 로 탐색하며, 경우의수를 구하는 문제이다.
처음시도는 두 index 를 양끝으로 갖는 구간의 합을 매번 새롭게 구해주는 방식으로 제출하였는데,
배열의 합을 구하는 method 까지 고려하면 3중 배열이 되어 시간초과가 발생하였다.
새롭게 만들어 지는 구간의 배열은 항상 연속되므로, 합을 새롭게 구하는 방식이 아닌 필요한 부분만 더해주고 필요없는 부분을 빼주는 방법을 적용하여 해결하였다.
N, M = map(int, input().split())
nums = list(map(int, input().split()))
s, e = 0, 1
tmp = nums[0]
res = 0
while s <= e:
if tmp == M:
res += 1
tmp -= nums[s]
s += 1
continue
if e == N and tmp < M:
break
if tmp < M:
tmp += nums[e]
e += 1
continue
if tmp > M:
tmp -= nums[s]
s += 1
continue
print(res)