백준 - 에너지 모으기 16198번

greenTea·2024년 1월 1일
0
post-thumbnail

코드 🔍

val list = mutableListOf<Int>()
var answer = 0

fun main() {
    val T = readLine()!!.toInt()
    readLine()!!.split(" ")
        .map { list.add(it.toInt()) }

    logic(0, 0)

    println(answer)
}

fun logic(count: Int, sum: Int) {

    if (list.size == 2) {
        answer = Math.max(answer, sum)
        return
    }

    for (index in 1..(list.lastIndex - 1)) {
        val temp = list[index]
        val addNum = sum + list[index - 1] * list[index + 1]
        list.removeAt(index)
        logic(count + 1, addNum)
        list.add(index, temp)
    }
}

접근 방법 💡

  1. 입력값 처리:

    • list: 입력 받은 값을 저장하기 위한 리스트. 전역 변수로 선언하여 다른 메소드에서도 사용할 수 있도록 합니다.
    • answer: 가장 큰 값을 비교하며 갱신하기 위해 선언한 변수입니다.
  2. logic 메소드:

    • 리스트의 크기가 2인 경우를 종료 조건으로 설정합니다. (문제 조건이였습니다.) 이 때, sum 값을 answer와 비교하여 더 큰 값으로 갱신합니다.
    • for 반복문을 통해 1부터 list.lastIndex - 1까지 순회합니다.(문제 조건이였습니다.) 문제 조건에 따라 계산을 진행합니다.
    • 삭제할 값을 temp에 임시로 저장하고, list[index - 1] * list[index + 1]을 계산하여 sum에 더합니다. 이후 list[index]를 삭제하고 재귀적으로 logic을 호출합니다.
    • 각 단계가 끝난 후, 삭제했던 값을 리스트에 다시 추가합니다.

출처 : 백준 - 에너지 모으기 16198번

profile
greenTea입니다.

0개의 댓글