백준 / 1806 / 부분합 / python

맹민재·2023년 5월 19일
0

알고리즘

목록 보기
98/134
def p():
    n, s = [int(v) for v in input().split()]
    n_list = list(map(int, input().split()))
    
    s_list = [0] * n
    s_list[0] = n_list[0]
    for i in range(1, n):
        s_list[i] = s_list[i-1] + n_list[i]
        
    s_list = [0] + s_list
    left, right = 0, 1

    result = []
    while right < n+1:
        tmp = s_list[right] - s_list[left]

        if tmp >= s:
            result.append(right - left)
            left += 1
            continue

        else:
            right += 1

    if len(result):
        return min(result)
    else:
        return 0

print(p())

누적 합과 투 포인터 알고리즘을 사용해서 해결한 문제

이 문제의 경우 아무리 투포인터를 사용한다고 해도 합을 매번 구하려면 연산량이 너무 많아진다.

따라서 누적합을 미리 구해놓고 투 포인터를 사용하여 해결한다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글