본문 바로가기

알고리즘/백준 (Pyhthon)

[알고리즘] 백준 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

 

left, right를 설정해놓고 진행해나가는데 right는 left와 같거나 커야한다.

left가 증가할 경우의 예외처리를 처음에 못했는데 left가 right보다 커지면 right를 left와 같게 해줘서 그 인덱스부터 시작할 수 있도록 해준다. (처음 시작하는 것 처럼)

 

N, M = map(int, input().split())
A = list(map(int, input().split()))
left, right, hap, count = 0, 0, A[0], 0
while right < N and left <= right:
    if hap == M:
        count += 1
        right += 1
        if right < N:
            hap += A[right]
    elif hap > M:
        hap -= A[left]
        left += 1
        if left > right and left < N:
            right = left
            hap = A[left]
    elif hap < M:
        right += 1
        if right < N:
            hap += A[right]
print(count)