본문 바로가기

알고리즘

[백준][Kotlin] 1912 연속합

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