알고리즘
section3.5 수들의 합
gitofjy
2022. 10. 26. 23:51
N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i]+A[i+1]+…+A[j-1]+A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.
import sys
sys.stdin = open("input.txt", "rt")
n, m = map(int, input().split())
list = list(map(int, input().split()))
# print(n, m, list)
# 8 3 [1, 2, 1, 3, 1, 1, 1, 2]
# 1개씩 합 구하고 2개씩 합 구하고 m개씩 합 구하기 > 코드는? > 2중 for문 사용
#for i in range(1, m+1):
# for j in range(n-j):
# 8개 2개일때 7번
# 8개 3개일때 6번
# 8개 4개일떄 5번
#if
# 2개의 합 > 3개의 합 >> 이렇게 이어질때 합을 못 구하겠음
# 리스트의 인덱싱 합이 있으면 가능할 것 같은데
2개, 3개 이런식의 묶음 개념으로 생각해서 못 풀었다
도저히 for문으로 해결이 안 돼서 포기
import sys
sys.stdin = open("input.txt", "rt")
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:
if rt>n:
tot += a[rt]
rt += 1
else:
break
elif tot == m:
cnt += 1
tot -= a[lt]
lt += 1
else:
tot -= a[lt]
lt += 1
print(cnt)
이런 식으로 인덱스를 두 개 이용해서 푸는 문제였다
어렵지 않으니 주말에 한 번 더 풀어봐야겠다
728x90