티스토리 뷰

https://www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

const num = input[1].split(' ').map(v=>+v);
let operator = input[2].split(' ').map(v=>+v);

let min = 1000000000;
let max = -1000000000;

//init
dfs(0,num[0]);
console.log(`${max}\n${min}`);


function dfs(cnt,val){
    const originVal = val;//다시 초기화 할 때 사용.
    
    
    if(cnt==input[0]-1){//탈출조건. 연산을 모두 했으면 최대 최소 비교
        if(val>max) max=val;
        if(val<min) min=val;
        return;
    }else{
        for(let i = 0; i<4; i++){
            if(operator[i]>0){
                switch(i){
                    case 0:
                        val+=num[cnt+1];
                    break;
                    case 1:
                        val-=num[cnt+1];
                    break;
                    case 2:
                        val*=num[cnt+1];
                    break;
                    case 3:
                        if(val>=0){
                            val = Math.floor(val/num[cnt+1])
                        }else{
                            val = Math.floor((-1)*val/num[cnt+1])
                            if(val>0) val = val*(-1);// -0이 나올 수도 있기 때문에 
                        }
                    break;
                }
               
                operator[i]--;
                dfs(cnt+1,val)
                val = originVal;
                operator[i]++;
            }
        }
    }
    return ;
}
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함