[백준] 1806(파이썬) - 부분합
resilient
·2021. 8. 5. 14:24
728x90
반응형
https://www.acmicpc.net/problem/1806
- 이 문제는 언뜻 보면 2중 for문으로 탐색하면 되는 거 아니야...?라고 생각할 수 있지만, 메모리와 시간제한을 보면 절대 그럴 수 없다.
- 이 문제는 투 포인터 문제로, 두개의 변수를 이용해서 인덱스로 활용해서 푸는 문제이다.
- 투 포인터인 점만 확인하면 비교적 쉽게 풀 수 있는 문제이다.
#시간초과 때문에 2중 for문은 안되고..
import sys
input = sys.stdin.readline
n,s = map(int,input().split())
data = list(map(int,input().split()))
cursor_1 = 0
cursor_2 = 0
ans = 100001
sum_ = 0
while 1:
if sum_ >= s:
sum_ -= data[cursor_1]
cursor_1 += 1
if cursor_2-cursor_1+1 < ans:
ans = cursor_2-cursor_1+1
else:
if cursor_2 == n:
break
else:
sum_ += data[cursor_2]
cursor_2 += 1
if ans < 100001:
print(ans)
else:
print(0)
# for i in range(n):
# while sum_<s and cursor_2 < n:
# sum_ += data[cursor_2]
# cursor_2 += 1
# if sum_ >= s:
# if abs(cursor_2-cursor_1)+1 < ans:
# ans = abs(cursor_2-cursor_1)+1
# sum_ -= data[cursor_1]
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
[백준] 1062(파이썬) - 가르침 (0) | 2021.08.08 |
---|---|
[백준] 11559(파이썬) - Puyo Puyo (0) | 2021.08.07 |
[백준] 2638(파이썬) - 치즈 (0) | 2021.08.04 |
[백준] 2096(파이썬) - 내려가기 (0) | 2021.08.03 |
[백준] 6118(파이썬) - 숨바꼭질 (0) | 2021.08.02 |