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
}
}