반응형
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
var start = 0
var min = Int.MAX_VALUE
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]
if (num >= m) {
println(1)
return
}
sum += num
if (sum > m) {
getMin(i)
setSum(arr, m, i)
} else if (sum==m) {
getMin(i)
}
}
println(if (min == Int.MAX_VALUE) 0 else min)
}
fun setSum(arr: IntArray, m: Int, end: Int) {
while (sum > m) {
sum -= arr[start++]
if (sum>=m) {
getMin(end)
}
}
}
fun getMin(end: Int) {
val length = end - start + 1
if (min > length) {
min = length
}
}
투포인터 문제 길이가 수들의 합2와 비슷한 문제이다.
m과 같거나 큰 수들의 연속합 중에 가장 작은 값을 구하면 되는데..
length에 +1과 sum의 크기에 따라 범위를 잘 정해야 한다.
위에도 범위 때문에 중복되는 로직이 있을 수 도 있다.
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 가사검색 코틀린 (0) | 2020.10.25 |
---|---|
카카오 블라인드 2020 문자열 압축 코틀린 (0) | 2020.09.06 |
백준 2003 투포인터 수들의 합2 코틀린 (0) | 2020.07.04 |
dfs 프로그래머스 네트워크 (0) | 2020.05.17 |
스택) 백준 9935번: 문자열 폭발 코틀린 (0) | 2020.05.01 |