🔗 Problem Link
https://leetcode.com/problems/maximum-average-subarray-i/description/
❔Thinking
- 숫자 배열 nums와 k가 주어질 때, k개의 연속된 부분 수열 중 가장 큰 평균을 반환한다.
💻Solution
1. 평균으로 비교하기
def findMaxAverage(self, nums: List[int], k: int) -> float:
max_avg = -(10**4 * 10**5 + 1)
left, right = 0, 0
window_sum = 0
while right < len(nums):
window_sum += nums[right]
if (right-left+1) == k:
max_avg = max(max_avg, window_sum / k if window_sum > 0 else -(-window_sum / k))
window_sum -= nums[left]
left = left+1
right += 1
return max_avg
2. 합의 최대를 비교하고, 마지막에 평균 반환하기
def findMaxAverage(self, nums: List[int], k: int) -> float:
window = sum(nums[:k])
max_sum = window
for i in range(k, len(nums)):
window += (nums[i] - nums[i-k])
max_sum = max(max_sum, window)
return max_sum / k
🗝️keypoint
- 평균이 가장 크다는 의미는, k개 숫자의 합이 가장 크다는 의미와 동일하다.
- max()를 통해 더 큰 평균값을 비교하는 연산의 횟수는 같으나, 평균값을 구하는 연산 횟수에서 풀이 시간의 차이가 발생한다.
'코딩테스트 > Python' 카테고리의 다른 글
[Baekjoon] 1013. Contact (1) | 2025.04.11 |
---|---|
[LeetCode] 283. Move Zeroes (0) | 2025.04.07 |
[Programmers] Level 2. 아날로그 시계 (0) | 2025.03.26 |
[LeetCode] 443. String Compression (0) | 2025.03.26 |
[LeetCode] 238. Product of Array Except Self (0) | 2025.03.24 |