일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- slidingwindow
- 슬라이딩윈도우
- 리트코드
- 생성형AI
- gcp
- two-pointer
- SQL
- 파이썬기초100제
- codeup
- GenAI
- 구글퀵랩
- nlp
- Blazor
- 파이썬
- 코드업
- dfs
- Python
- stratascratch
- 알고리즘
- medium
- 파이썬알고리즘
- 투포인터
- Microsoft
- GenerativeAI
- LeetCode
- 자연어처리
- Python3
- 니트코드
- 릿코드
- sql코테
Archives
- Today
- Total
Tech for good
[Leetcode/Sliding Window] 643. Maximum Average Subarray I 본문
IT/Computer Science
[Leetcode/Sliding Window] 643. Maximum Average Subarray I
Diana Kang 2025. 2. 25. 00:04슬라이딩 윈도우(Sliding Window)
: 윈도우(특정 범위)가 있을 때, 윈도우 내부 요소의 값을 이용하여 문제를 풀이하는 알고리즘.
class Solution:
def findMaxAverage(self, nums: List[int], k: int) -> float:
# 초기 윈도우 설정 (첫 k개의 합)
current_sum = sum(nums[:k])
max_sum = current_sum
# 슬라이딩 윈도우 이동
for i in range(k, len(nums)):
current_sum += nums[i] - nums[i - k] # 윈도우 이동 (새로운 값 추가, 오래된 값 제거)
max_sum = max(max_sum, current_sum) # 최댓값 갱신
# 최댓값을 k로 나눠 평균 반환
return max_sum / k
풀이 설명
- 처음 k개의 합을 current_sum으로 설정 (O(k) 연산).
- k부터 끝까지 반복하며:
- 슬라이딩 윈도우 이동:
- 가장 오래된 요소 nums[i - k]를 제거.
- 새로운 요소 nums[i]를 추가.
- max_sum을 갱신.
- 슬라이딩 윈도우 이동:
- 최댓값을 k로 나눠 평균을 반환.
시간 복잡도
- O(N): 리스트를 한 번 순회(O(N))하면서 덧셈/뺄셈 연산(O(1))을 수행 → O(N).
- O(1) 추가 공간 사용: max_sum과 current_sum만 저장하므로 추가 메모리 사용이 거의 없음.
슬라이딩 윈도우 방식의 장점
✅ O(N)으로 해결 가능 (완전 탐색을 하면 O(N*k)로 비효율적임)
✅ 추가 공간 사용이 적음 (O(1))
✅ 덧셈과 뺄셈만 사용하므로 연산이 빠름
'IT > Computer Science' 카테고리의 다른 글
[Neetcode 150/Sliding Window] Longest Repeating Character Replacement (0) | 2025.02.26 |
---|---|
[Leetcode/Sliding Window] 1176. Diet Plan Performance (0) | 2025.02.26 |
[Leetcode/Sliding Window, HashMap] 219. Contains Duplicate II (0) | 2025.02.24 |
[Leetcode/TwoPointer] 844. Backspace String Compare (0) | 2025.02.24 |
[Leetcode/TwoPointer] 2825. Make String a Subsequence Using Cyclic Increments (0) | 2025.02.22 |