1806. 부분합
문제
풀이
투포인터라는 힌트를 본 덕에 쉽게 풀 수 있었다..
연속된 부분 수열의 왼쪽과 오른쪽을 가리키는 l, r
변수를 사용하여 시간복잡도를 O(n)으로 줄일 수 있었다.
어떤 케이스에서 오답인지 모르겠어서 검색해서 몇 개 대입해본 후 고쳤는데,
테스트케이스를 대입하는 중에도 계속 인덱스 범위를 꼼꼼하게 체크하지 않아서 IndexError: list index out of range
가 나왔었다.
n, s = map(int, input().split())
a = list(map(int, input().split()))
res = 1e9
l, r = 0, 0
tot = 0
while r <= len(a) and l <= r:
if res == 1: break
if tot >= s:
if res > r-l: res = r-l
tot -= a[l]
l += 1
else:
if r == len(a): break
tot += a[r]
r += 1
if res != 1e9: print(res)
else: print(0)
부족한 점
항상 인덱스 범위를 꼼꼼하게 체크하자 -> 특히 while문에서 pos
등의 인덱스 변수 활용할 때
Author And Source
이 문제에 관하여(1806. 부분합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimsen/1806.-부분합저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)