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

# 수들의 합
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)
'Algorithm > 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
[python/inflearn/section3] 사과나무(다이아몬드) (1) | 2022.09.25 |
---|---|
[python/inflearn/section3] 격자판 최대합 (1) | 2022.09.25 |
[python/inflearn/section3] 두 리스트 합치기 (0) | 2022.09.22 |
[python/inflearn/section3] 카드 역배치(정올 기출) (0) | 2022.09.22 |
[python/inflearn/section3] 숫자만 추출 (0) | 2022.09.22 |