본문 바로가기

알고리즘

백준 2003 투포인터 수들의 합2 코틀린

반응형

import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*



var start = 0
var count = 0
var sum = 0

fun main(args: Array<String>) {
    val br =
        BufferedReader(InputStreamReader(System.`in`))
    val line = br.readLine()
    val n = line.split(" ").toTypedArray()[0].toInt()
    val m = line.split(" ").toTypedArray()[1].toInt()
    val arr = IntArray(n)
    val st = StringTokenizer(br.readLine())
    for (i in 0 until n) {
        arr[i] = st.nextToken().toInt()
    }
    for (i in arr.indices) {
        val num = arr[i]

        sum += num

        if (sum > m) {
            setSum(arr, m)
        } else if (sum == m) {
            count++
            sum -= arr[start++]
        }
    }

    println(count)


}

fun setSum(arr: IntArray, m: Int) {
    while (sum>m) {
        sum -= arr[start++]
        if (sum == m) {
            count++
        } 
    }
}

투포인터 문제이다.
start라는 포인터를 두어 해당 연속된 수들의 합이 m이랑 같거나 크게 되면 포인터를 증가시킨다.
m보다 클 경우는 m보다 작을 때까지 start를 증가시킨다.

반응형