-
[백준] 1806번 문제 (부분합) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 10. 14. 13:30
https://www.acmicpc.net/problem/1806
import sys n, s = map(int, input().split()) nums = list(map(int, input().split())) head, tail = 0, 0 tmp_sum = 0 result = sys.maxsize while True: if tmp_sum >= s: result = min(result, tail - head) tmp_sum -= nums[head] head += 1 elif tail == n: break else: tmp_sum += nums[tail] tail += 1 if result == sys.maxsize: print(0) else: print(result)
투 포인터 문제다.
tail이 먼저 출발하고,
head가 따라가는 형태다.
(뭔가 head, tail의 역할이 반대 같지만 개인적으로 head가 인덱스 0으로부터 가까운게 인지하기 편해서 이렇게 했다..)
tail 과 head를 점점 증가시키며,
sum(nums[head:tail + 1])이 s보다 같거나 크면 tail - head 를 구해 수열의 개수를 파악한다.
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 12851번 문제 (숨바꼭질 2) 파이썬(Python) 풀이 (0) 2021.10.14 [백준] 1743번 문제 (음식물 피하기) 파이썬(Python) 풀이 (0) 2021.10.14 [백준] 14719번 문제 (빗물) 파이썬(Python) 풀이 (0) 2021.10.14 [백준] 14888번 문제 (연산자 끼워넣기) 파이썬(Python) 풀이 (0) 2021.10.14 [백준] 1753번 문제 (최단경로) 파이썬(Python) 풀이 (0) 2021.10.12