while(1) work();
반응형

링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV141J8KAIcCFAYD 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

분류

트리

 

개인적 난이도

매우 쉬움 쉬움 보통 어려움 매우 어려움

 

핵심 알고리즘

재귀를 이용해 트리로 표현된 식을 계산한다.

 

시행착오

없음

 

코드

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
profile

while(1) work();

@유호건

❤️댓글은 언제나 힘이 됩니다❤️ 궁금한 점이나 잘못된 내용이 있다면 댓글로 남겨주세요.

검색 태그