경험의 기록

문제 : www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 

www.acmicpc.net

 

 

import java.util.*
import kotlin.math.*

fun main() = with(Scanner(System.`in`)){
    var arr = IntArray(100){0} // 수열
    var sign = IntArray(4){0} // 부호, 순서대로(+,-,*,/)
    var n = 0 // 수의 개수
    var max = -100000000 // 최대값
    var min = 100000000 // 최소값

    // 수의 개수 입력
    n = nextInt()

    // 수열 입력
    for (i in 0 until n) arr[i] = nextInt()

    // 부호 수 입력
    for (i in sign.indices) sign[i] = nextInt()

    // dfs
    fun find(a : Int, x : Int){
        // 탐색 완료
        if(a == n){
            max = max(max,x)
            min = min(min,x)
        }

        for(i in sign.indices){
            if(sign[i] != 0){
                sign[i]--
                when(i){
                    0 -> find(a+1,x+arr[a])
                    1 -> find(a+1,x-arr[a])
                    2 -> find(a+1,x*arr[a])
                    3 -> find(a+1,x/arr[a])
                }
                sign[i]++
            }
        }
    }

    find(1,arr[0])

    println(max)
    println(min)

}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading