[Python-CodingTest] 3-5. 수들의 합
수들의 합
문제 정리
입력
8 3
1 2 1 3 1 1 1 2
처리 과정
- 두개의 포인터 변수(p1,p2) 초기화
p1=0
p2=1
tot
: lst[p1]부터 lst[p2] “이전”까지의 합tot<m
tot==m
tot>m
으로 경우의 수 나눠서 작성tot<m
이면p2<n
인 경우에만tot
에 값을 더하고 p2는 다음으로 이동tot==m
이면 카운트 하고tot
에서lst[p1]
값을 뺀 뒤에 p1은 다음으로 이동tot>m
이면 카운트는 안하고 5번과 마찬가지로 작성
출력
5
풀이
import sys
sys.stdin = open("./input/in5.txt", "rt")
n,m = map(int, input().split())
lst = list(map(int, input().split()))
# 포인터 변수 초기화
p1=0
p2=1
tot=lst[0] # lst[p1]부터 lst[p2] "이전"까지의 합 (초기화는 lst[0]으로)
cnt=0 # 경우의 수
while True:
if tot<m:
if p2<n:
tot+=lst[p2] # 이후에 p2+=1 하니까 tot에는 lst[p2]를 더하는게 맞음
p2+=1
else:
break
elif tot==m:
cnt+=1
tot-=lst[p1]
p1+=1
else:
tot-=lst[p1]
p1+=1
print(cnt)
정리
- 두 개의 포인터 변수를 이용해 풀기
tot<m
인 경우에서if p2<n
에 등호가 들어가지 않는 이유?p2<=n
이 아닌 이유는tot<m
인 경우에는p2
가n-1
일 때까지만 해당 if문 통과할 수 있고,p2+=1
을 통해n
이 되면tot==m
이거나tot>m
인 경우에만 진행 가능하며tot<m
일 경우에는break
해야하기 때문
💛 개인 공부 기록용 블로그입니다. 👻