
소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는kotlin을 기반으로 작성합니다.
이번 주 주제는 슬라이딩 윈도우 알고리즘이며
백준에 하루 한 문제를 풀어가며 작성할 것입니다.
슬라이딩 윈도우
해당 내용은 위 포스트에 작성하였습니다.
https://www.acmicpc.net/problem/2559
이 문제는 입력되는 온도의
N개 수열에서
연속적인K일의 온도의 합이 최대가 되는 값을 출력을 받아야합니다.
- 어제와 마찬가지로 온도의 배열을 받는데
n의 범위가 이고
k의 범위가 이기에Long타입배열을 받아주었고- 연속되는
k의 초기 값을sum변수에 받아준 뒤 동일하게ans에 받아줍니다.- 반복문을 통해 슬라이딩 윈도우 알고리즘을 사용하여
ans와sum을
max함수로 비교해가며 더 큰 값이 최대값이기에 값을ans에 담아주었습니다.
import java.io.StreamTokenizer
import kotlin.math.max
fun main() = with(StreamTokenizer(System.`in`.bufferedReader())){
fun nextInt() : Int {
nextToken()
return nval.toInt()
}
val n = nextInt(); val k = nextInt()
val arr = LongArray(n){nextInt().toLong()}
var sum = 0L
repeat(k){
sum += arr[it]
}
var ans = sum
for(x in k..<n){
sum += arr[x] - arr[x-k]
ans = max(ans, sum)
}
println(ans)
}
