[백준] 오르막길 (2846)(kotlin)

문제 설명

백준 2846번 문제 링크

입력 및 출력

» 입력

첫째 줄에 상근이가 측정한 높이의 수이자 수열의 크기인 N(1 ≤ N ≤ 1000)이 주어진다. 둘째 줄에는 N개의 양의 정수 Pi(1 ≤ Pi ≤ 1000)가 주어진다. 각 숫자는 상근이가 측정한 높이이다.

» 출력

첫째 줄에 가장 큰 오르막길의 크기를 출력한다. 만약 오르막길이 없는 경우에는 0을 출력한다.

예제 입출력(테스트케이스)

입력 출력
8
12 20 1 3 4 4 11 1
8

문제 힌트

예제의 경우 오르막길은 총 3개가 있다. (12-20, 1-3-4, 4-11) 오르막길에 포함된 숫자는 항상 증가해야 한다. 따라서, 1-3-4-4-11은 오르막길이 아니다.

문제 풀이1

import kotlin.math.abs

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val N = readLine().toInt()
    val route = readLine().split(" ").map { it.toInt() }
    val list = mutableListOf<Int>()

    if (list.size == 1) {
        println(0)
        return
    }

    var prev = route[0]
    var prevMin = route[0]
    var isUp = false

    for (i in 1 until route.size) {
        if (prev >= route[i]) {
            if (isUp) {
                list.add(abs(prevMin - prev))
                isUp = false
            }
        }

        if (prev <= route[i]) {
            if (!isUp) {
                prevMin = prev
                isUp = true
            }
        }

        prev = route[i]
    }

    if (isUp || prev < route[route.size - 1]) {
        list.add(abs(prevMin - route[route.size - 1]))
    }

    println(list.maxByOrNull { it } ?: 0)
}