swexpert
[SWEXPERT] 1232. 사칙연산 (이진트리, C++, D4)
해랑쓰
2021. 10. 1. 16:33
728x90
반응형
사칙연산 유효성 검사 풀고 풀었다가 완전 이진트리로 착각하여 입력을 이상하게 받아
5번 예제부터 자꾸 틀렸다. ㅠㅠ
아닌 걸 알고 입력부분 고쳐서 해결함.
연산자를 가지는 노드는 자식이 없고 연산자인 노드만 자식을 추가적으로 입력받는다.
나머지는 재귀로 중위 계산해준다.
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <vector>
#include <string>
using namespace std;
double tree[1001][2];
string oper[1001];
double inorder(int num) {
if (tree[num][0]) {//자식있음
double a = inorder(tree[num][0]); //왼쪽 계산
double b = inorder(tree[num][1]); //오른쪽 계산
if (oper[num] == "+")return a + b;
if (oper[num] == "-")return a - b;
if (oper[num] == "*")return a * b;
if (oper[num] == "/")return a / b;
}
return stod(oper[num]); //자식없는 친구는 자기자신(수) 리턴
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
for (int tc = 1; tc <= 10; tc++)
{
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> i;
string ch;//자식없으면 숫자가 들어간다.
cin >> ch;
oper[i] = ch;
if (ch == "+" || ch == "-" || ch == "*" || ch == "/") {//연산자인 애들만 자식있음
double left, right;
cin >> left >> right;
tree[i][0] = left;
tree[i][1] = right;
}
}
int ans=inorder(1);//정수로 자름
cout << "#" << tc << " " << ans << "\n";
}
return 0;
}
728x90
반응형