-
[백준] 1806번 부분합 (by Python)Programming/Algorithm 2021. 3. 26. 02:01
문제
https://www.acmicpc.net/problem/1806
풀이
n, s = map(int, input().split()) arr = list(map(int, input().split())) ans = n + 1 temp = 0 start = 0 for i in range(n): temp += arr[i] if temp >= s: while temp >= s: temp -= arr[start] start += 1 ans = min(ans, i - start + 2) print(0 if ans > n else ans)
투 포인터 문제이다. S 이상의 값이 될 때까지 시작점에서부터 값을 쭉 더하고, 도달했을 때에는 S 미만의 값이 될 때까지 시작점에서부터의 값을 빼 해당 구간에서 합이 S 이상의 값이 되는 최소 길이를 구하고, 이를 반복하는 방식이다.
'Programming > Algorithm' 카테고리의 다른 글
[백준] 17070번 파이프 옮기기 1 (by Python) (0) 2021.04.08 [백준] 2293번 동전 1 (by Python) (0) 2021.03.31 [백준] 14719번 빗물 (by Python) (0) 2021.03.26 [백준] 1786번 찾기 (by Python) (0) 2021.03.24 [백준] 1062번 가르침 (by Python) (0) 2021.03.24