[백준] 1806번 부분합

거북이·2023년 8월 9일
0

백준[골드4]

목록 보기
31/59
post-thumbnail

💡문제접근

  • 누적 합 + 투 포인터의 개념을 이용하는 문제였다.
  • 수열의 길이가 10 ≤ N < 100,000이라는 점을 활용해 길이가 N인 수열 이후 나머지 부분을 0으로 채워넣어 IndexError가 나오는 것을 방지할 수 있었다.

💡코드(메모리 : 42340KB, 시간 : 116ms)

import sys
input = sys.stdin.readline

N, S = map(int, input().strip().split())
lst = list(map(int, input().strip().split())) + [0 for _ in range(100001)]

left = 0
right = 0
partsum = lst[0]
min_length = float('INF')

while right <= N:
    if partsum >= S:
        if min_length > right - left + 1:
            min_length = right - left + 1
        partsum -= lst[left]
        left += 1
    else:
        right += 1
        partsum += lst[right]

if min_length == float('INF'):
    print(0)
else:
    print(min_length)

💡소요시간 : 7m

0개의 댓글