말랑한 하루

[SW Expert Academy] 1224 계산기 3 [Java] 본문

문제풀이/SWexpert Academy

[SW Expert Academy] 1224 계산기 3 [Java]

지수는말랑이 2021. 2. 7. 23:40
반응형

[ 핵심풀이 ]

후위표기식을 사용한 문제이다
그대로 구현한다면 어렵지않다.

아직 아래코드는 완벽한 구현점이아니므로, 위 링크를 참고하기바란다.

[ Java ]

import java.util.Iterator;
import java.util.Scanner;
import java.util.Stack;

public class _1224_계산기3 {
    static int len;
    static String input;

    static void init() {
        Scanner sc = new Scanner(System.in);
        for (int t = 1; t <= 10; t++) {
            len = sc.nextInt();
            input = sc.next();
            System.out.print("#" + t + " ");
            solve();
        }
    }

    static void solve() {
        String output = "";
        String priority = "";
        Stack<Character> stack = new Stack<Character>();

        for (int i = 0; i < len; i++) {
            char index = input.charAt(i);
            if (index == '(') 
                stack.push(index);
            else if (index >= '0' && index <= '9')
                output += index;
            else if (index == '*' || index == '+') {
                if (index=='+' && (stack.peek() == '*' || stack.peek()=='+'))
                    output += stack.pop();
                if (index=='*' && stack.peek() == '*')
                    output += stack.pop();
                stack.push(index);
            }
            else if (index == ')') {
                while(true) {
                    char temp = stack.pop();
                    if (temp == '(') break;
                    output += temp;
                }
            }
        }
        while (!stack.isEmpty())
            output += stack.pop();
        calc(output);
    }

    static void calc(String input) {
        Stack<Integer> stack = new Stack<Integer>();
        for (int index = 0; index < input.length(); index++) {
            char value = input.charAt(index);
            if (value == '*')
                stack.push(stack.pop() * stack.pop());
            else if (value == '+')
                stack.push(stack.pop() + stack.pop());
            else
                stack.push(Integer.parseInt(value+""));
        }
        System.out.println(stack.pop());
    }
    
	public static void main(String[] args) {
        init();
    }
}
반응형
Comments