Home > Baekjoon > 부분합

부분합
128 MB 26.789%

출처 : 부분합

Solution
Python

import sys
input = sys.stdin.readline

if __name__ == '__main__':
    N, S = map(int, input().split())
    lst = list(map(int, input().split()))
    # 투 포인터 / i, j < N
    i, j = 0, 0
    # 누적합 now
    now = lst[i]
    # 부분합 길이 초기 값
    answer = N+1
    while True:
        # 합이 S 이상이면, 답 갱신(길이에 자신도 포함해야하니 +1)
        if now >= S:
            answer = min(answer, j-i+1)
            # i를 한 칸 앞으로 옮기면서, 이전 i값은 빼줌
            now -= lst[i]
            i += 1
            # i가 j보다 커지면 최소 n(1)이 구해진 것
            if i > j: break
        # 합이 S 미만이면 부분합 길이를 늘리기 위해 j+1
        else:
            j += 1
            # j 가 N보다 작을 때는, now에 j 위치 값만큼 더해준다.
            if j < N: now += lst[j]
            # j가 N 이상이라면, 더이상 부분합으로 S 이상 못 만든다는 것
            else: break
    # 초기값 그대로라면 0, 아니면 answer
    answer = answer if answer != (N+1) else 0
    print(answer)

문제

10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.

출력

첫째 줄에 구하고자 하는 최소의 길이를 출력한다. 만일 그러한 합을 만드는 것이 불가능하다면 0을 출력하면 된다.

예제 입력 1

10 15
5 1 3 5 10 7 4 9 2 8

예제 출력 1

2
W3sicHJvYmxlbV9pZCI6IjE4MDYiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWJkODBcdWJkODRcdWQ1NjkiLCJkZXNjcmlwdGlvbiI6IjxwPjEwLDAwMCBcdWM3NzRcdWQ1NThcdWM3NTggXHVjNzkwXHVjNWYwXHVjMjE4XHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzljNCBcdWFlMzhcdWM3NzQgTlx1YzlkY1x1YjlhYyBcdWMyMThcdWM1ZjRcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWM3NzQgXHVjMjE4XHVjNWY0XHVjNWQwXHVjMTFjIFx1YzVmMFx1YzE4ZFx1YjQxYyBcdWMyMThcdWI0ZTRcdWM3NTggXHViZDgwXHViZDg0XHVkNTY5IFx1YzkxMVx1YzVkMCBcdWFkZjggXHVkNTY5XHVjNzc0IFMgXHVjNzc0XHVjMGMxXHVjNzc0IFx1YjQxOFx1YjI5NCBcdWFjODMgXHVjOTExLCBcdWFjMDBcdWM3YTUgXHVjOWU3XHVjNzQwIFx1YWM4M1x1Yzc1OCBcdWFlMzhcdWM3NzRcdWI5N2MgXHVhZDZjXHVkNTU4XHViMjk0IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0NCBcdWM3OTFcdWMxMzFcdWQ1NThcdWMyZGNcdWM2MjQuPFwvcD5cclxuIiwiaW5wdXQiOiI8cD5cdWNjYWJcdWM5ZjggXHVjOTA0XHVjNWQwIE4gKDEwICZsZTsgTiAmbHQ7IDEwMCwwMDApXHVhY2ZjIFMgKDAgJmx0OyBTICZsZTsgMTAwLDAwMCwwMDApXHVhYzAwIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4gXHViNDU4XHVjOWY4IFx1YzkwNFx1YzVkMFx1YjI5NCBcdWMyMThcdWM1ZjRcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWMyMThcdWM1ZjRcdWM3NTggXHVhYzAxIFx1YzZkMFx1YzE4Y1x1YjI5NCBcdWFjZjVcdWJjMzFcdWM3M2NcdWI4NWMgXHVhZDZjXHViZDg0XHViNDE4XHVjNWI0XHVjODM4IFx1Yzc4OFx1YzczY1x1YmE3MCwgMTAsMDAwXHVjNzc0XHVkNTU4XHVjNzU4IFx1Yzc5MFx1YzVmMFx1YzIxOFx1Yzc3NFx1YjJlNC48XC9wPlxyXG4iLCJvdXRwdXQiOiI8cD5cdWNjYWJcdWM5ZjggXHVjOTA0XHVjNWQwIFx1YWQ2Y1x1ZDU1OFx1YWNlMFx1Yzc5MCBcdWQ1NThcdWIyOTQgXHVjZDVjXHVjMThjXHVjNzU4IFx1YWUzOFx1Yzc3NFx1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuIFx1YjljY1x1Yzc3YyBcdWFkZjhcdWI3ZWNcdWQ1NWMgXHVkNTY5XHVjNzQ0IFx1YjljY1x1YjRkY1x1YjI5NCBcdWFjODNcdWM3NzQgXHViZDg4XHVhYzAwXHViMmE1XHVkNTU4XHViMmU0XHViYTc0IDBcdWM3NDQgXHVjZDljXHViODI1XHVkNTU4XHViYTc0IFx1YjQxY1x1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIwIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJLb3JlYW4ifSx7InByb2JsZW1faWQiOiIxODA2IiwicHJvYmxlbV9sYW5nIjoiMSIsInRpdGxlIjoiU3Vic2VxdWVuY2UiLCJkZXNjcmlwdGlvbiI6IjxwPkEgc2VxdWVuY2Ugb2YgTiBwb3NpdGl2ZSBpbnRlZ2VycyAoMTAgJmxlOyBOICZsdDsgMTAwIDAwMCksIGVhY2ggb2YgdGhlbSBsZXNzIHRoYW4gb3IgZXF1YWwgMTAwMDAsIGFuZCBhIHBvc2l0aXZlIGludGVnZXIgUyAoUyAmbGU7IDEwMCAwMDAgMDAwKSBhcmUgZ2l2ZW4uIFdyaXRlIGEgcHJvZ3JhbSB0byBmaW5kIHRoZSBtaW5pbWFsIGxlbmd0aCBvZiB0aGUgc3Vic2VxdWVuY2Ugb2YgY29uc2VjdXRpdmUgZWxlbWVudHMgb2YgdGhlIHNlcXVlbmNlLCB0aGUgc3VtIG9mIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBTLiZuYnNwOzxcL3A+XHJcbiIsImlucHV0IjoiPHA+TWFueSB0ZXN0IGNhc2VzIHdpbGwgYmUgZ2l2ZW4uIEZvciBlYWNoIHRlc3QgY2FzZSB0aGUgcHJvZ3JhbSBoYXMgdG8gcmVhZCB0aGUgbnVtYmVycyBOIGFuZCBTLCBzZXBhcmF0ZWQgYnkgYW4gaW50ZXJ2YWwsIGZyb20gdGhlIGZpcnN0IGxpbmUuIFRoZSBudW1iZXJzIG9mIHRoZSBzZXF1ZW5jZSBhcmUgZ2l2ZW4gaW4gdGhlIHNlY29uZCBsaW5lIG9mIHRoZSB0ZXN0IGNhc2UsIHNlcGFyYXRlZCBieSBpbnRlcnZhbHMuIFRoZSBpbnB1dCB3aWxsIGZpbmlzaCB3aXRoIHRoZSBlbmQgb2YgZmlsZS48XC9wPlxyXG4iLCJvdXRwdXQiOiI8cD5Gb3IgZWFjaCB0aGUgY2FzZSB0aGUgcHJvZ3JhbSBoYXMgdG8gcHJpbnQgdGhlIHJlc3VsdCBvbiBzZXBhcmF0ZSBsaW5lIG9mIHRoZSBvdXRwdXQgZmlsZS4gSWYgaXQgaXMgaW1wb3NzaWJsZSB0byBtYWtlIHN1Y2ggYSBzdW0sIHByaW50IHplcm8uPFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMSIsImh0bWxfdGl0bGUiOiIwIiwicHJvYmxlbV9sYW5nX3Rjb2RlIjoiRW5nbGlzaCJ9XQ==