티스토리 뷰
https://leetcode.com/problems/minimum-size-subarray-sum/description/
- 자연수를 담고 있는 리스트 nums와 목표 자연수 target이 주어진다
- nums의 subarray 중, subarray 내의 모든 원소의 합이 target 이상이면서 길이가 가장 짧은 subarray의 길이를 구하는 문제
아이디어
1. subarray의 시작 지점이 고정이라면, subarray의 합을 늘리기 위해 끝 지점을 늘려가면서 탐색할 수 있음
2. subarray의 끝 지점을 늘려가다 합이 target 보다 같거나 커지면 더 이상 subarray를 늘려볼 필요가 없음
3. subarray의 합을 줄이기 위해서는 시작 지점을 늘린다
-> 기본적인 two-pointer 흐름이니까 기억해둘 것
two-pointer를 이용한 부분합을 구할 때는, 배열의 첫 부분과 마지막 부분만 업데이트
그렇기 때문에 업데이트 되는 원소 값만 더하거나 빼줘야 더 빠르게 부분합을 빠르게 업데이트 할 수 있다
-> sliding window
시간복잡도는 O(n)
class Solution(object):
def minSubArrayLen(self, target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
if sum(nums) < target:
return 0
# subarray의 처음과 끝 index
start, end = 0, 0
answer = len(nums)
total_sum = nums[0]
while start <= end:
# subarray의 합 검사
# target 보다 크다면, start를 늘려서 subarray를 줄이기
if total_sum >= target:
answer = min(answer, end - start + 1)
total_sum -= nums[start]
start += 1
if start == len(nums):
break
# target 보다 작다면, end를 늘려서 subarray를 늘리기
else:
end += 1
if end == len(nums):
break
total_sum += nums[end]
return answer
'알고리즘' 카테고리의 다른 글
heap 자료구조 관련 leetcode 문제풀이 (0) | 2025.06.20 |
---|---|
[C++] 백준 BOJ 2437번 저울 (0) | 2020.10.22 |
[C++] 백준 BOJ 2436번 공약수 (0) | 2020.10.11 |
[C++] 백준 BOJ 1405번 미친 로봇 (0) | 2020.10.09 |
[C++] 백준 BOJ 2467번 용액 (0) | 2020.10.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DECI
- #information_retrieval
- directives
- 조건부확률
- NAACL21
- two-pointers
- GCN
- emnlp2024
- LeetCode
- Rag
- iclr
- CoT
- 파이토치
- python
- PyTorch
- KL_Divergence
- #BOJ #2467번 #투포인터알고리즘
- llm agent
- emnlp
- #BOJ #유클리드호제법
- LLM
- #1405번
- javascript
- #BOJ #그리디알고리즘
- #브루트포스
- 인과관계추론
- #BOJ #알고리즘 #1034번
- sliding window
- #BOJ
- 베르누이분포
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함