문제
10211번: Maximum Subarray
크기 N인 정수형 배열 X가 있을 때, X의 부분 배열(X의 연속한 일부분) 중 각 원소의 합이 가장 큰 부분 배열을 찾는 문제이다.
www.acmicpc.net

풀이
연속된 부분 수열의 합 중 최댓값을 구하는 전형적인 DP(Dynamic Programming) 문제이다. 입력받은 현재 값을 더해가며 최대 부분합을 갱신한다. 이때, 합이 음수라면 새로운 구간을 시작하면 된다.
코드
fun main() {
val sb = StringBuilder()
repeat(readln().toInt()) {
val num = readln().toInt()
val arr = readln().split(' ').map { it.toInt() }
val dp = IntArray(num)
var max = arr[0]
dp[0] = arr[0]
for(i in 1 until num) {
if(dp[i-1] < 0) dp[i - 1] = 0
dp[i] = dp[i - 1] + arr[i]
max = maxOf(max, dp[i])
}
sb.append("$max\n")
}
print(sb.toString())
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
| [백준] 13699번: 점화식 - Kotlin[코틀린] (0) | 2024.06.20 |
|---|---|
| [백준] 1402번: 아무래도이문제는A번난이도인것같다 - Kotlin[코틀린] (0) | 2024.06.17 |
| [백준] 2303번: 숫자 게임 - Kotlin[코틀린] (0) | 2024.06.13 |
| [백준] 2422번: 한윤정이 이탈리아에서 아이스크림을 사먹는데 - Kotlin[코틀린] (0) | 2024.06.07 |
| [백준] 21921번: 블로그 - Kotlin[코틀린] (0) | 2024.06.02 |