반응형
링크
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV141J8KAIcCFAYD
분류
트리
개인적 난이도
매우 쉬움 | 쉬움 | 보통 | 어려움 | 매우 어려움 |
핵심 알고리즘
재귀를 이용해 트리로 표현된 식을 계산한다.
시행착오
없음
코드
import java.util.*;
import java.io.*;
class Solution{
static Node[] tree;
public static void main(String args[]) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(int tc = 1; tc <= 10; ++tc){
int N = Integer.parseInt(br.readLine());
tree = new Node[N];
for (int i = 0; i < N; i++){
String[] arr = br.readLine().split(" ");
if (arr.length == 2) tree[i] = new Node(arr[1]);
else tree[i] = new Node(arr[1], arr[2], arr[3]);
}
System.out.println("#" + tc + " " + (int)tree[0].calc());
}
}
public static class Node{
double v;
int left = -1, right = -1;
public Node(String v, String left, String right){
this(v);
this.left = Integer.parseInt(left);
this.right = Integer.parseInt(right);
}
public Node(String v){
if (v.equals("+")) this.v = -1;
else if (v.equals("-")) this.v = -2;
else if (v.equals("*")) this.v = -3;
else if (v.equals("/")) this.v = -4;
else this.v = Integer.parseInt(v);
}
public double calc(){
if (left == -1) return this.v;
double c1 = tree[this.left - 1].calc(), c2 = tree[this.right - 1].calc();
if (v == -1) return c1 + c2;
if (v == -2) return c1 - c2;
if (v == -3) return c1 * c2;
return c1 / c2;
}
}
}
반응형
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
1249. 보급로 (0) | 2022.02.16 |
---|---|
1248. 공통조상 (0) | 2022.02.16 |
1233. 사칙연산 유효성 검사 (0) | 2022.02.16 |
1251. 하나로 (0) | 2022.02.16 |
1855. 영준이의 진짜 BFS (0) | 2022.02.16 |