알고리즘

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