알고리즘
[백준][Kotlin] 1912 연속합
금님은님아부지
2021. 12. 17. 17:14
728x90
- https://www.acmicpc.net/problem/1912
1912번: 연속합
첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
풀이
1. 수열을 저장하는 배열을 선언한다.
2. 수열을 순환하면서 최대값을 저장하는 dp 배열을 선언한다.
3. 현재 입력되는 값과 이전 최대값과 현재 입력 값 중 최대 값을 저장한다.
4. 저장된 dp 배열에서 최대값을 구한다.
코드
import java.util.*
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
val n = sc.nextInt()
val arr = Array(n) {
sc.nextInt()
}
val dp = IntArray(n)
dp[0] = arr[0]
for (i in 1 until n) {
dp[i] = max(dp[i - 1] + arr[i], arr[i])
}
var result = Int.MIN_VALUE
for (i in 0 until n) {
if (result < dp[i]) {
result = dp[i]
}
}
println(result)
}
private fun max(a: Int, b: Int): Int {
return if (a < b) b else a
}
728x90