본문 바로가기

코딩테스트 with PYTHON

[python] 코딩테스트 대비 - 수열의 합 (경우의 수)

문제)

 

 

정답 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys
#sys.stdin = open("input.txt", 'r')
n, m=map(int, input().split())
a=list(map(int, input().split()))
lt=0#왼쪽 포인터
rt=1#오른쪽 포인터
tot=a[0]#합
cnt=0#카운트
 
while True:
    if tot<m:#더한 값이 m보다 작으면 오른쪽으로 한칸 더하기
        if rt<n:
            tot+=a[rt]
            rt+=1
        else:#오른쪽으로 갈 수 없으면 종료
            break
    elif tot==m:#정답이라면
        cnt+=1#카운트 하고
        tot-=a[lt]#가장 왼쪽 값 빼주기
        lt+=1#왼쪽 포인터 증가
    else:#크다면 정답일때와 똑같은 동작(카운트는 x)
        tot-=a[lt]
        lt+=1
print(cnt)#정답
cs