문제 링크 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV141J8KAIcCFAYD
문제의 저작권은 SW Expert Academy에 있습니다.
#include
#include
using namespace std;
typedef struct _node {
bool isNum;
long double num;
char op;
int lIdx;
int rIdx;
} node;
node *nodes;
long double getNum(int idx) {
if(nodes[idx].isNum)
return nodes[idx].num;
else {
switch(nodes[idx].op) {
case '+':
return getNum(nodes[idx].lIdx-1) + getNum(nodes[idx].rIdx-1);
break;
case '-':
return getNum(nodes[idx].lIdx-1) - getNum(nodes[idx].rIdx-1);
break;
case '*':
return getNum(nodes[idx].lIdx-1) * getNum(nodes[idx].rIdx-1);
break;
case '/':
return getNum(nodes[idx].lIdx-1) / getNum(nodes[idx].rIdx-1);
break;
}
}
}
int main(void) {
int T, N;
char temp;
string tempStr;
//cin >> T;
T = 10;
for(int t_case=0; t_case> N;
nodes = (node*)malloc(sizeof(node)*N);
for(int i=0; i> tempStr;
cin >> tempStr;
if(tempStr.at(0) >= '0' & tempStr.at(0) <= '9') {
nodes[i].isNum = true;
nodes[i].num = stoi(tempStr); //(int)(temp - '0');
} else {
nodes[i].isNum = false;
nodes[i].op = tempStr.at(0);
cin >> nodes[i].lIdx;
cin >> nodes[i].rIdx;
}
}
cout << "#" << t_case+1 << " " << (int)getNum(0) << "\n";
free(nodes);
}
return 0;
}