본문 바로가기

Algorithm/파이썬 알고리즘 문제풀이

[python/inflearn/section3] 수들의 합

본 내용은 파이썬 알고리즘 문제풀이 (코딩테스트 대비) 강의를 토대로 작성하였습니다.

이미지 클릭시, 강의로 이동됩니닷 :)

# 수들의 합
import sys
#sys.stdin=open("input.txt", "r")

# 전체 숫자 n , 찾고자하는 부분합 m
n, m=map(int, input().split())
a=list(map(int, input().split()))
# 리스트의 왼쪽 인덱스 값
lt=0
# 리스트의 오른쪽 인덱스 값
rt=1
# 합계
tot=a[0]
#겅우의 수
cnt=0

# 부분 수열의 합이 m이 되는 모든 경우의 수
while True:
    if tot<m: # 합계가 찾고자 하는 값보다 작다.
        if rt<n: # 리스트의 끝까지 다 돌지 않았으면
            tot+=a[rt] # 합계에 누적하고
            rt+=1 # 오른쪽 인덱스를 증가시킨다.
        else: # 오른쪽인덱스가 리스트의 끝까지 돌았으면 break
            break
    elif tot==m: # 찾고자하는 값을 찾았다면
        cnt+=1  # 경우의수 증가
        tot-=a[lt] # 왼쪽 인덱스값을 빼주고
        lt+=1 # 왼쪽 인덱스값 증가시킨다.
    else: # 합계가 찾고자하는 값보다 크다.
        tot-=a[lt] # 왼쪽 인덱스값을 빼주고
        lt+=1  # 왼쪽 인덱스값 증가시킨다.
print(cnt)