얼렁뚱땅 JAVA 문제풀이

[JAVA] 전위순회로 사칙연산 계산하기

MOSTAR 2023. 3. 2. 16:12

이게 되네 ,,,

 

import java.util.*;
import java.io.*;

public class 사칙연산 {
	
	static HashMap <Integer,String> content;
	static HashMap <Integer,Integer> left;
	static HashMap <Integer,Integer> right;
	
	public static int dfs(int num) {
		int left_cal;
		int right_cal;
		
		if(left.get(num)!=-1) {
			left_cal = dfs(left.get(num));
			right_cal = dfs(right.get(num));
			
			int tem_answer = 0;
			if(content.get(num).equals("+"))  {
				tem_answer = left_cal + right_cal;
			} else if(content.get(num).equals("-")) {
				tem_answer = left_cal - right_cal;
			} else if(content.get(num).equals("*")) {
				tem_answer = left_cal * right_cal;
			} else {
				tem_answer = (int) (left_cal / right_cal);
			}
			return tem_answer;
			// 숫자면 반드시 뒤에 자식들 없
		} else {
			return Integer.parseInt(content.get(num));
		}
		
	}
	
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		for(int t=1;t<=10;t++) {
			content = new HashMap <Integer,String>();
			left = new HashMap <Integer,Integer>();
			right = new HashMap <Integer,Integer>();
			int n = Integer.parseInt(br.readLine());
			for(int i=0;i<n;i++) {
				String [] str = br.readLine().split(" ");
				content.put(Integer.parseInt(str[0]), str[1]);
				if(str.length>=4) {
					left.put(Integer.parseInt(str[0]), Integer.parseInt(str[2]));
					right.put(Integer.parseInt(str[0]), Integer.parseInt(str[3]));
				} else {
					left.put(Integer.parseInt(str[0]), -1);
					right.put(Integer.parseInt(str[0]), -1);
				}
			}
			System.out.print("#" + t+" ");
			System.out.print(dfs(1));
			System.out.println();
		}
	}

}