후위 연산식 계산하기

문제

설명

후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.

만약 3(5+2)-9 을 후위연산식으로 표현하면 352+9- 로 표현되며 그 결과는 12입니다.

입력

첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다.

식은 1~9의 숫자와 +, -, *, / 연산자로만 이루어진다.

출력

연산한 결과를 출력합니다.

예시 입력 1

352+*9-

예시 출력 1

12

해결방법

  • 후위연삭식 : 연산식이 중간이 아니라 뒤쪽으로 빠지는 식. 평소 보는 식은 중위연산식. ex) 3 * ( 5 + 2 ) - 9 » 352+*9-
  • 보통 후위연산식 처리는 스택으로 처리한다.
  • 문자로 표현된 숫자(Char c = 0 과 같은.) 에서 48을 빼면 int 로 형변환 된 숫자가 나온다. 참고

코드

import java.util.*;

class Main {
    public int solution(String str) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        // 계산식을 불러온다.
        for (char x : str.toCharArray()) {
            // 만약 숫자라면 형변환 하여 스택에 넣는다.
            if (Character.isDigit(x)) {
                stack.push(x - 48);
            } else {
                // 기호라면 스택에서 연산자 2개를 꺼내온다.
                int rt = stack.pop();
                int lt = stack.pop();
                // 사칙연산을 한다.
                if (x == '+') stack.push(lt + rt);
                else if (x == '-') stack.push(lt - rt);
                else if (x == '*') stack.push(lt * rt);
                else if (x == '/') stack.push(lt / rt);
            }
        }
        // 정답을 계산한다.
        answer = stack.get(0);
        return answer;
    }

    public static void main(String[] args) {
        Main.Main T = new Main.Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(T.solution(str));
    }
}


© 2024. Chiptune93 All rights reserved.