
예제 입력 1
4
-+0++++--+
예제 출력 1
-2 5 -3 1
예제 입력 2
2
+++
예제 출력 2
3 4
예제 입력 3
5
++0+-+-+--+-+--
예제 출력 3
1 2 -3 4 -5
이렇게 되는것 같은데
즉 브루토포스로 수치를 다때려 박으면서 재귀를 통해 계속 자기자신을 반복하는것임
그리고 앞서 말할것 처럼 이 방법이 맞는지 확인하고 아니면 바로 돌아가는 것으로 다시 돌아가서 확인하는 백트래킹으로 진행하는것임
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
char input_num_index[10][10];
int count_num;
int result[10];
bool check_num(int count_void)
{
int sum = 0;
for(int i = count_void;i>=0;i--)
{
sum = sum+result[i];
if(input_num_index[i][count_void]=='+'&&sum<=0)
return false;
if(input_num_index[i][count_void]=='-'&&sum>=0)
return false;
if(input_num_index[i][count_void]=='0'&&sum!=0)
return false;
}
return true;
}
void bfs(int count_void)
{
if(count_void == count_num)
{
for(int i = 0 ; i<count_void;i++)
{
cout<<result[i]<<" ";
}
exit(0);
}
for(int i = -10;i<=10;i++)
{
if(input_num_index[count_void][count_void]=='+' && i<=0) continue;
if(input_num_index[count_void][count_void]=='-'&& i>=0) continue;
if(input_num_index[count_void][count_void]=='0'&& i!=0) continue;
result[count_void] = i;
if(check_num(count_void)==true)
{
bfs(count_void+1);
}
}
}
int main()
{
int input_bo_index = 0;
string input_bo;
cin>>count_num;
cin>>input_bo;
for(int i = 0;i<count_num;i++)
{
for(int j = i; j<count_num;j++)
{
input_num_index[i][j]=input_bo[input_bo_index++];
}
}
bfs(0);
}