
소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는kotlin을 기반으로 작성합니다.
이번 주 주제는 슬라이딩 윈도우 알고리즘이며
백준에 하루 한 문제를 풀어가며 작성할 것입니다.
슬라이딩 윈도우
해당 내용은 위 포스트에 작성하였습니다.
https://www.acmicpc.net/problem/12847
이 문제는 월세를 내야하는
n일 안에 최대m일을 일할 수 있는데
여기서 m일 안에 벌 수 있는 돈의 최대값을 구해야 합니다.
여기서 알바는 연달아서 해야하며 퇴사를 하고 다시 일 할 수 없다는 조건이 있습니다.
- 일단
n과m의 변수를 받아 줍니다.- 여기서
n의 범위는 (이며m의 범위는 이기에
Long타입의 배열을 받아줍니다.- 그 뒤
m일 동안 일 할 수 있는 초기값 3개를 가져와sum을 만들어주고- 반복문을 통해
arr[x]-arr[x-m]즉 첫 3개를 더한 다음 값과 이전 값의 차를 구해주어
다음 연속m개의 합을 구해주고max함수를 통해ans와sum을 비교해
더 큰 값을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 m = nextInt()
val arr = LongArray(n){
nextInt().toLong()
}
var sum = 0L
repeat(m){
sum += arr[it]
}
var ans = sum
for(x in m..<n){
sum+=arr[x] - arr[x-m]
ans = max(ans, sum)
}
println(ans)
}
