파이썬 알고리즘 문제풀이-Section 3 (수들의 합)

dobyming·2022년 1월 19일
0
post-thumbnail

Q. N개의 수로 된 수열 A[1], A[2], ... , A[N]이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i]+A[i+1]+..+A[j-1]+A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.

N, M = map(int,input("몇 개의 수(N)을 입력할지,목표값 M을 입력하세요: ").split())
a=list(map(int,input("고른 N개의 수를 나열해주세요: ").split()))

lt=0
rt=1
tot = a[0] #lt~rt 직전까지의 인접한 값들의 합
cnt = 0 #경우의 수 

while True:
    if tot<M:
        if rt<N:
            tot += a[rt] 
            rt +=1
        else:
            break
    elif tot==M:
        cnt+=1
        tot -= a[lt] #a[lt]값을 계속해서 누적하면 안되므로 
        lt+=1
    else:
        tot-=a[lt]
        lt+=1

print(cnt)

0개의 댓글