728x90

 

부분합 전통적인 문제입니다.

 

문제에서 S "이상" 이라는 것을 못보고 뻘짓하느라 오답을 마구마구 제출했네요 ,,,

 

코드는 이하와 같습니다.

 

prefix_sum의 i번째 원소를 num[i]까지의 합이라고 하면

num_i 부터 num_j까지의 합은 prefix_sum[j] - prefix_sum[i-1] 가 됩니다.

이를 활용하면 다음과 같습니다.

import sys
input = sys.stdin.readline

N,S = map(int,input().split())
num = list(map(int,input().split()))
prefix = [0]
for i in range (0,N):
    prefix.append(prefix[-1] + num[i])
    
answer = []
l,r = 0,1
while l < r and r != N+1:
    partial_sum = prefix[r] - prefix[l]
    if partial_sum >= S:
        answer.append(r-l)
        l += 1
    elif partial_sum < S:
        r += 1


answer.sort()

if len(answer) == 0:
    print(0)
else:
    print(answer[0])

 

 

 

 

 

'코딩' 카테고리의 다른 글

[ABC 366] AtCoder Beginner Contest 366 리뷰  (0) 2024.08.17
[BOJ, 백준] 17404 RGB 거리 2  (0) 2024.08.12
[BOJ, 백준] 8895 막대배치 Python  (0) 2024.08.05
[BOJ, 백준] 7869 두 원  (0) 2024.07.26
[BOJ, 백준] 1007 벡터매칭 Python  (0) 2024.07.26

+ Recent posts