본문 바로가기

백준/브루트포스

연산자 끼워넣기(2)

728x90

www.acmicpc.net/problem/15658

 

15658번: 연산자 끼워넣기 (2)

N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 연산자의 개수

www.acmicpc.net

#include <iostream>
#include <algorithm>
using namespace std;

int oper[4];
int arr[11];
int n;
int t=0;
int maxcalc,mincalc;


void findminmax(int totaloper, int res, int plus, int minus, int mult, int divide)
{
   if(plus==0 && minus==0 && divide==0 && mult==0 && totaloper!=n-1){return;}
   if(totaloper==n-1){
    if(t==0){maxcalc =res; mincalc=res;}
    if(res>maxcalc){maxcalc=res;}
    else if(res<mincalc){mincalc=res;}   
    t++;
    return;
   }
   if(plus>0){
   findminmax(totaloper+1,res+arr[totaloper+1],plus-1,minus,mult,divide);
   }
   if(minus>0){
   findminmax(totaloper+1,res-arr[totaloper+1],plus,minus-1,mult,divide);
   }
   if(mult>0){
   findminmax(totaloper+1,res*arr[totaloper+1],plus,minus,mult-1,divide);
   } 
   if(divide>0){
   findminmax(totaloper+1,res/arr[totaloper+1],plus,minus,mult,divide-1);
   }
   
   return;

}

int main()
{
    cin>>n;
    for(int i=0; i<n; i++){cin>>arr[i];}
    for(int i=0; i<4; i++){   
       cin>>oper[i];
    }
   
    findminmax(0,arr[0],oper[0],oper[1],oper[2],oper[3]);
    cout<<maxcalc<<"\n";
    cout<<mincalc<<"\n";
}

'백준 > 브루트포스' 카테고리의 다른 글

에너지모으기  (0) 2021.02.05
두 동전  (0) 2021.02.03
연산자 끼워넣기  (0) 2021.01.08
부분 수열의 합  (0) 2021.01.07
부분수열의 합  (0) 2021.01.06