[A&I Code Camp] Day38

Hood·2024년 10월 30일

A&I Code Camp

목록 보기
30/38
post-thumbnail

✍   Kotlin을 PS 문제 풀기

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


21921번

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

이 문제는 최대 방문자 수와 해당 일 수가 몇 일인지를 구하는 문제입니다.

Solve

  1. 누적합으로 방문자 수의 증가량을 구한다.
  2. 처음 비교할 x일 동안 방문한 최대 수를 pSum의 x번째 배열로 잡고
  3. 반복문을 통해 총 합에서 그 값을 뺀 만큼 더한 값이 크다면 최대 방문자 수일테니 maxCnt를 1로 초기화한다.
  4. 반복을 돌다 totalSum과 sum이 같다는 것은 최대 방문자 수와 해당 일자의 x일 만큼 수 방문자 수가 일치하다는 것이니 maxCnt를 하나 늘린다.
  5. totalSum이 0이라면 그것은 n일 만큼 방문자 수가 없을테니
    SAD를 출력하고 아니라면 totalSum과 maxCnt를 출력한다.
fun main() = with(StreamTokenizer(System.`in`.bufferedReader())){
    fun nextInt() : Int {
        nextToken()
        return nval.toInt()
    }

    val n = nextInt(); val x = nextInt()

    val pSum = IntArray(n+1){ 0 }
    repeat(n){
        pSum[it+1] = pSum[it] + nextInt()
    }

    var totalSum = pSum[x]
    var maxCnt = 0

    for (i in x .. n) {
        val sum = pSum[i] - pSum[i-x]
        if (totalSum < sum){
            totalSum = sum
            maxCnt = 1
        } else if (totalSum == sum) {
            maxCnt++
        }
    }

    if (totalSum == 0) {
        println("SAD")
    } else {
        println(totalSum)
        println(maxCnt)
    }
}
profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글