반응형
https://leetcode.com/problems/maximum-average-subarray-i/description/
누적합으로 해결한 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
1. 누적합 vector sum을 num.size()만큼 할당 후 0으로 초기화해 선언해줍니다.2. nums의 원소를 순회하며 sum에 원소를 채워줍니다.
📔 풀이과정
1. sum[4]의 의미는 0 ~ 4번째 원소까지의 누적합이라는 의미입니다. i ~ i + k - 1까지의 누적합은 sum[i] - sum[i-k]로 구할 수 있습니다. 2. sum의 원소들을 순회하며 maxAvg값을 구해줍니다.* n이 10만까지이므로 2차원 for loop로는 시간초과가 납니다. 따라서 for loop 하나로 답을 구해야 합니다.
📔 정답 출력 | 반환
maxAvg를 반환합니다.
📕 Code
📔 C++
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
vector <double> sum(nums.size(), 0);
sum[0] = nums[0];
for(int i = 1; i < nums.size(); i++) {
sum[i] = sum[i-1] + nums[i];
}
double maxAvg = sum[k-1]/k;
for(int i = k; i < nums.size(); i++) {
maxAvg = max(maxAvg, (sum[i] - sum[i-k])/k);
}
return maxAvg;
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > Sweeping' 카테고리의 다른 글
(Python3) - 프로그래머스(코딩테스트 입문) : 겹치는 선분의 길이 (1) | 2024.11.03 |
---|---|
(C++) - 백준(BOJ) 20366 : 같이 눈사람 만들래? (0) | 2022.06.30 |
(C++) - 백준(BOJ) 15565번 : 귀여운 라이언 (0) | 2021.08.22 |
(C++) - 백준(BOJ) 2018번 : 수들의 합 5 (0) | 2021.08.19 |
(C++) - 백준(BOJ) 1689번 : 겹치는 선분 (0) | 2021.08.11 |