Daily LeetCode Challenge - 2090. K Radius Subarray Averages

Min Young Kim·2023년 6월 20일
0

algorithm

목록 보기
177/198

Problem From.

https://leetcode.com/problems/k-radius-subarray-averages/

오늘 문제는 nums array 와 k 가 주어졌을때, 각각의 index 에서 앞뒤로 k 만큼의 원소의 평균을 구해서 다른 리스트에 넣어 반환하는 문제였다. 이때, 해당 인덱스에서 앞뒤로 k 만큼이 nums array 의 범위를 벗어난다면, -1 을 넣어주어야 했다.

이 문제는 sliding window 기법을 활용하여 풀 수 있었는데, nums array 를 처음부터 끝까지 탐색하면서, k 를 더하거나 빼서 범위를 벗어나면 -1 을 넣어주었다.
범위안에 들어오는것에 대해서는, 먼저 제일 처음 범위안에 들어올때, 그 구간의 합인 sum 을 구한다.
그 뒤에 index 를 하나 늘릴때마다, sum 에서 앞에오는 원소를 빼고 뒤에오는 원소를 더해주어서, 각각의 index 마다의 구간의 평균을 구해주었다.

class Solution {
    fun getAverages(nums: IntArray, k: Int): IntArray {
        
        val answer = IntArray(nums.size) { -1 }
        
        var sum = 0L
        var length = (k * 2 + 1).toLong()
        
        for(i in 0 until answer.size) {
            
            if(i - k < 0 || i + k > answer.size - 1) continue
            
            if(i == k) {
                for(j in 0..i + k) {
                    sum += nums[j].toLong()
                }
                answer[i] = (sum / length).toInt()
            }else {
                sum -= nums[i - k - 1].toLong()
                sum += nums[i + k].toLong()
                answer[i] = (sum / length).toInt()
            }
            
        }
        
        return answer
    }
}
profile
길을 찾는 개발자

0개의 댓글