코딩테스트/Python

[LeetCode] 643. Maximum Average Subarray I

swwho 2025. 4. 10. 12:24
728x90
반응형

🔗 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

  1. 평균이 가장 크다는 의미는, k개 숫자의 합이 가장 크다는 의미와 동일하다.
  2. max()를 통해 더 큰 평균값을 비교하는 연산의 횟수는 같으나, 평균값을 구하는 연산 횟수에서 풀이 시간의 차이가 발생한다.