[A&I Code Camp] Day43

Hood·2024년 11월 6일

A&I Code Camp

목록 보기
34/38
post-thumbnail

✍   Kotlin을 PS 문제 풀기

소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는 kotlin을 기반으로 작성합니다.


슬라이딩 윈도우

이번 주 주제는 슬라이딩 윈도우 알고리즘이며
백준에 하루 한 문제를 풀어가며 작성할 것입니다.
슬라이딩 윈도우
해당 내용은 위 포스트에 작성하였습니다.

2559번

https://www.acmicpc.net/problem/2559

이 문제는 입력되는 온도의 N개 수열에서
연속적인 K일의 온도의 합이 최대가 되는 값을 출력을 받아야합니다.

Solve

  1. 어제와 마찬가지로 온도의 배열을 받는데 n의 범위가 (2n100,000)(2 ≤ n ≤ 100,000) 이고
    k의 범위가 (100k100)(-100 ≤ k ≤ 100) 이기에 Long타입 배열을 받아주었고
  2. 연속되는 k의 초기 값을 sum 변수에 받아준 뒤 동일하게 ans에 받아줍니다.
  3. 반복문을 통해 슬라이딩 윈도우 알고리즘을 사용하여 anssum
    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)
}

profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글