일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dfs
- GenAI
- sql코테
- two-pointer
- Python
- LeetCode
- stratascratch
- 파이썬
- slidingwindow
- 자연어처리
- 파이썬기초100제
- 코드업
- 릿코드
- 슬라이딩윈도우
- Microsoft
- 투포인터
- Blazor
- 생성형AI
- gcp
- medium
- codeup
- GenerativeAI
- SQL
- 리트코드
- 파이썬알고리즘
- Python3
- 알고리즘
- nlp
- 니트코드
- 구글퀵랩
Archives
- Today
- Total
Tech for good
[Leetcode/Sliding Window] 1176. Diet Plan Performance 본문
IT/Computer Science
[Leetcode/Sliding Window] 1176. Diet Plan Performance
Diana Kang 2025. 2. 26. 23:14// calories = [1,2,3,4,5]
// k = 2
// lower = 5
// upper = 6
// 1st: (1,2) = 3 < lower -> -1
// 2nd: (2,3) = 5 -> 0
슬라이딩 윈도우 접근법:
- 슬라이딩 윈도우를 사용하면 매번 k 길이의 구간을 합산하는 대신, 윈도우를 한 칸씩 이동하며 기존 합에서 가장 왼쪽 값을 빼고, 새롭게 들어온 값을 더하는 방식으로 효율적으로 합계를 구할 수 있다.
- 시간 복잡도는 O(n)으로, calories 길이가 최대 10^5까지 가능하므로 효율적으로 동작한다.
class Solution:
def dietPlanPerformance(self, calories: List[int], k: int, lower:int, upper: int) -> int:
points = 0
window_sum = sum(calories[:k])
# 첫번째 윈도우의 점수 계산
if window_sum < lower:
points -= 1
elif window_sum > upper:
points += 1
# 슬라이딩 윈도우를 이용하여 나머지 구간 확인
for i in range(k, len(calories)):
window_sum += calories[i] - calories[i-k] # 윈도우 이동
if window_sum < lowewr:
points -= 1
elif window_sum > upper:
points += 1
return points
🔹 설명
- window_sum을 이용해 첫 k일간의 총합을 구한다.
- window_sum을 lower 및 upper와 비교하여 점수를 갱신한다.
- 이후, for 루프를 사용해 슬라이딩 윈도우 방식으로 window_sum을 갱신한다.
- 새롭게 추가된 calories[i]를 더하고, 가장 왼쪽 calories[i-k]를 제거한다.
- 이후 점수를 다시 업데이트한다.
- 최종 점수를 반환한다.
🔹 시간 복잡도 분석
- O(k) 연산이 첫 k일 합을 구하는 데 사용된다.
- 이후 O(n-k)의 반복문이 O(1) 연산으로 window_sum을 갱신한다.
- 전체 시간 복잡도: O(n)
'IT > Computer Science' 카테고리의 다른 글
[Leetcode/Sliding Window] 1652. Defuse the Bomb (0) | 2025.03.03 |
---|---|
[Neetcode 150/Sliding Window] Longest Repeating Character Replacement (0) | 2025.02.26 |
[Leetcode/Sliding Window] 643. Maximum Average Subarray I (0) | 2025.02.25 |
[Leetcode/Sliding Window, HashMap] 219. Contains Duplicate II (0) | 2025.02.24 |
[Leetcode/TwoPointer] 844. Backspace String Compare (0) | 2025.02.24 |