백준 27496 발머의 피크 이론 Kotlin

: ) YOUNG·2023년 8월 26일
1

알고리즘

목록 보기
244/370
post-thumbnail

백준 27496번
https://www.acmicpc.net/problem/27496

문제




생각하기


  • 누적 합과 Sliding Window 알고리즘을 사용하는 문제이다.
    • 개념을 익히기 좋은 문제인 것 같다.

동작


    var sum = 0L
    val que: Queue<Int> = LinkedList()
    StringTokenizer(br.readLine()).run {
        for (i in 1..N) {
            val temp = nextToken().toInt()
            que.offer(temp)

            sum += temp
            if (que.size > L) {
                sum -= que.poll()
            }

            if (sum in 129..138) ans++
        }
    }

Queue 자료구조를 통해서 문제를 해결했다.

que의 사이즈가 L보다 커질 경우 하나씩 sum값을 줄여가며 범위에 들어가는 값을 찾으면 된다.



결과


코드


Kotlin


import java.io.*
import java.util.*

// input
private lateinit var br: BufferedReader

// variables
private var N = 0
private var L = 0
private var ans = 0

fun main() {
    br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))

    input()

    bw.write(solve())
    bw.close()
} // End of main()

private fun solve(): String {
    val sb = StringBuilder()

    sb.append(ans)
    return sb.toString()
} // End of solve()

private fun input() {
    StringTokenizer(br.readLine()).run {
        N = nextToken().toInt()
        L = nextToken().toInt()
    }

    var sum = 0L
    val que: Queue<Int> = LinkedList()
    StringTokenizer(br.readLine()).run {
        for (i in 1..N) {
            val temp = nextToken().toInt()
            que.offer(temp)

            sum += temp
            if (que.size > L) {
                sum -= que.poll()
            }

            if (sum in 129..138) ans++
        }
    }
} // End of input()

0개의 댓글