반응형
** 문제 풀이 방법
- 처음 들어오는 값이 숫자인지 문자(연산자)인지 판별 후 재귀적으로 연산 |
*** 코드
#include <stdio.h>
#define MAX_N 1001
using namespace std;
struct tree {
bool is_num;
int num;
int child_node[2];
}tree[MAX_N];
double calculation(int idx) {
if (tree[idx].is_num) {
return (double)tree[idx].num;
}
else {
double c1 = calculation(tree[idx].child_node[0]);
double c2 = calculation(tree[idx].child_node[1]);
switch (tree[idx].num){
case '+': return c1 + c2;
case '-': return c1 - c2;
case '*': return c1 * c2;
case '/': return c1 / c2;
}
}
return -1;
}
int main() {
//freopen("input.txt", "r", stdin);
int TC = 10;
for (int tc = 1; tc <= TC; tc++) {
int N = 0;
scanf("%d", &N);
for (int i = 1; i <= N; i++) {
int idx = 0;
scanf("%d", &idx);
char value[10];
scanf("%s", &value);
if (value[0] >= '0' && value[0] <= '9') { // 숫자일 경우
tree[idx].is_num = true;
int num = 0;
for (int i = 0; value[i]; i++) { // string 배열의 마지막 값은 '0'이므로 그 전까지 순회
num *= 10;
num += value[i] - '0'; // char형 숫자에서 숫자값 추출
}
tree[idx].num = num;
}
else {
tree[idx].is_num = false;
int num = value[0];
int c1 = 0;
int c2 = 0;
scanf("%d %d", &c1, &c2);
tree[idx].num = num;
tree[idx].child_node[0] = c1;
tree[idx].child_node[1] = c2;
}
}
printf("#%d %.0lf\n", tc, calculation(1));
}
return 0;
}
**** 주의할 점
- Tree의 index 주의 - 문자형태의 숫자를 변환하는 것 빼먹지 않기 |
<Reference>
- https://swexpertacademy.com/main/main.do
- https://blog.uniony.me/swea/1232/
반응형
'Data science > 알고리즘 학습' 카테고리의 다른 글
백준 1280 : 나무심기 (C++) [세그멘트 트리, 펜윅트리] (0) | 2022.03.31 |
---|---|
SWEA 5604 : 구간합[D4] (C++) (0) | 2022.03.30 |
c++ 자료형 정리 (0) | 2022.02.28 |
SWEA 1251 : 하나로[D4] (c++)_(priority_queue) (0) | 2022.02.23 |
그래프 알고리즘 (0) | 2022.02.22 |