[백준] 블랙잭 (2798)(kotlin)

문제 설명

백준 2798번 문제 링크

입력 및 출력

» 입력

  • 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.

» 출력

첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.

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

입력 출력
5 21
5 6 7 8 9
21
10 500
93 181 245 214 315 36 185 138 216 295
497

문제 풀이1

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

    for (i in 0 until N - 2) for (j in i + 1 until N - 1) for (k in j + 1 until N) {
        val result = cards[i] + cards[j] + cards[k]

        if (result <= M) {
            if (result == M) {
                println(M)
                return
            } else {
                list.add(result)
            }
        }
    }

    println(list.maxByOrNull { it })
}