[SWEA] 1232. 사칙연산 (C++, 라이브러리 X)
Algorithm 카테고리의 다른 글
Tree 기본문제
풀이
기호, 숫자, 자식노드에 따라서 입력 형태가 바뀜.
따라서 문자열로 받아서 파싱.
root 부터 재귀적으로 자식 노드 탐색 및 계산.
코드 GitHub
#include <iostream>
using namespace std;
#define MAXN 1000
int N;
struct Node {
bool isNum;
int num;
int children[2];
} nodes[MAXN];
double Calc(int idx) {
if(nodes[idx].isNum) return (double) nodes[idx].num;
double c1 = Calc(nodes[idx].children[0]);
double c2 = Calc(nodes[idx].children[1]);
switch(nodes[idx].num) {
case '+': return c1 + c2;
case '-': return c1 - c2;
case '*': return c1 * c2;
case '/': return c1 / c2;
default : return -1;
}
return -1;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
freopen("input.txt", "r", stdin);
for(int tc = 1; tc <=10; tc++) {
cin >> N;
for(int n = 0; n < N; n++) {
int idx;
cin >> idx;
idx--;
char str[10];
cin >> str;
if(str[0] >= '0' && str[0] <= '9') {
nodes[idx].isNum = true;
int num = 0;
for(int i = 0; str[i]; i++) {
num *= 10;
num += str[i] - '0';
}
nodes[idx].num = num;
} else {
nodes[idx].isNum = false;
int num = str[0];
int c1, c2;
cin >> c1 >> c2;
c1--;c2--;
nodes[idx].num = num;
nodes[idx].children[0] = c1;
nodes[idx].children[1] = c2;
}
}
cout << '#' << tc << ' ' << Calc(0) << '\n';
}
return 0;
}
댓글남기기