728x90
문제
https://www.acmicpc.net/problem/1806
풀이
투 포인터를 사용해 풀었습니다.
left
,right
을 0으로 초기화합니다.right
가 0부터N
까지 아래 작업을 반복합니다.- 누적합(
total
)이S
미만이면 누적합에nums[right]
를 더합니다. - 누적합이
S
이상이면 미만이 될 때까지 아래 작업을 반복합니다.- 최소 길이를 저장합니다.
- 누적합에서
num[left]
를 뺍니다. left
를 1 증가시킵니다.
right
를 1 증가시킵니다.
- 누적합(
코드
파이썬
import sys
input = sys.stdin.readline
INF = sys.maxsize
N, S = map(int, input().split())
nums = list(map(int, input().split()))
answer = INF
total = 0
left = 0
for right in range(N):
if total < S:
total += nums[right]
while total >= S:
answer = min(answer, right - left + 1)
total -= nums[left]
left += 1
print(answer if answer != INF else 0)
728x90
'🚩 코딩테스트 > 알고리즘' 카테고리의 다른 글
[백준] 16586번: 치킨 배달 (0) | 2023.05.09 |
---|---|
[백준] 10986번: 나머지 합 (0) | 2023.05.09 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2023.03.16 |
[백준] 9019번: DSLR (0) | 2023.03.16 |
[백준] 13549번: 숨바꼭질 3 (0) | 2023.03.08 |