본문 바로가기
알고리즘/SWEA

[Java] SWEA 1232번 사칙연산

by 컴공맨 2021. 2. 22.
 

SW Expert Academy

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

swexpertacademy.com


풀이

input 값이 완전 이진 트리로 주어지는것이 아니기 때문에 Node 클래스를 만들어 왼쪽 자식과 오른쪽 자식의 위치를 저장하여 해결했습니다.


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

class Node {
	public String op;
	public double num;
	
	public int left;
	public int right;
	
	public Node(String op, double n, int l, int r) {
		this.op = op;
		this.num = n;
		this.left = l;
		this.right = r;
	}
}

public class Solution {
	public static int N;
	public static Node[] tree = new Node[1001];
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder("");
		StringTokenizer st;
		
		for (int tc = 1; tc <= 10; ++tc) {
			N = Integer.parseInt(br.readLine());
			
			for (int i = 1; i <= N; ++i) {
				st = new StringTokenizer(br.readLine(), " ");
				
				// 인덱스는 전부 나오므로 첫 번째 입력은 버려
				st.nextToken();
				
				if (st.countTokens() > 1) {
					tree[i] = new Node(st.nextToken(), 0, Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
				}
				else {
					tree[i] = new Node("", Double.parseDouble(st.nextToken()), -1, -1);
				}
			}
			
			for (int i = N; i > 0; i--) {
				if (tree[i].left > 0 && tree[i].right > 0) {
					if (tree[i].op.equals("+")) {
						tree[i].num = tree[tree[i].left].num + tree[tree[i].right].num;
					}
					else if (tree[i].op.equals("-")) {
						tree[i].num = tree[tree[i].left].num - tree[tree[i].right].num;
					}
					else if (tree[i].op.equals("*")) {
						tree[i].num = tree[tree[i].left].num * tree[tree[i].right].num;
					} 
					else {
						tree[i].num = tree[tree[i].left].num / tree[tree[i].right].num;
					}
				}
			}
			
			sb.append("#").append(tc).append(" ").append((int) tree[1].num).append("\n");
		}
		
		System.out.print(sb);
	}
}

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com

 

'알고리즘 > SWEA' 카테고리의 다른 글

[Java] SWEA 1219번 길찾기  (0) 2021.02.24
[Java] SWEA 1227번 미로2  (0) 2021.02.23
[Java] SWEA 1233번 사칙연산 유효성 검사  (2) 2021.02.19
[Java] SWEA 1224번 계산기3  (0) 2021.02.18
[Java] SWEA 1222번 계산기1  (0) 2021.02.17