BaekJoon

14888번 연산자 끼워넣기

GamJia 2023. 4. 4. 09:05

단계별로 풀어보기 - 백트래킹- 7단계

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

#include <iostream>
using namespace std;
int N;
int operators[4];
int num[11];
int Min=1000000001;
int Max=-1000000001;

void check(int result,int key)
{
    if(key==N)
    {
        if(result>Max)
        {
            Max=result;
        }
        if(result<Min)
        {
            Min=result;
        }
        return;
    }
    
    for(int i=0;i<4;i++)
    {
        if(operators[i]>0)
        {
            operators[i]--;
            if(i==0)
            {
                check(result+num[key],key+1);
            }
            
            else if(i==1)
            {
                check(result-num[key],key+1);
            }
            
            else if(i==2)
            {
                check(result*num[key],key+1);
            }
            
            else
            {
                check(result/num[key],key+1);
            }            
            operators[i]++;
        }
    }    
}

int main()
{
    cin>>N;
    for(int i=0;i<N;i++)
    {
		cin>>num[i];
	}

	for(int i=0;i<4;i++)
    {
		cin>>operators[i];
	}	
	check(num[0],1);
	cout<<Max<<"\n";
	cout<<Min;
    
    return 0;
}