몽상실현개발주의

[BOJ] 2003 / 수들의 합 2 / Python 파이썬 본문

Algorithm PS/BOJ

[BOJ] 2003 / 수들의 합 2 / Python 파이썬

migrationArc 2021. 8. 9. 13:12

[BOJ] 2003 / 수들의 합 2 / Python 파이썬

[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)
Comments