본문 바로가기

Algorithm/Inflearn

[Inflearn] 자바 알고리즘 문제풀이 #05-04 4. 후위식 연산(postfix)

문제

설명

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

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

 

입력 

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

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

 

출력 

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

 

 

 

선생님 풀이
import java.util.Scanner;
import java.util.Stack;

public class Main5_4 {
    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{
                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) {
        Main5_4 T = new Main5_4();
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println(T.Solution(str));
    }
}

자바 char에서 int로 형변환 하는 법 !! 아스키코드상 숫자를 활용한다

숫자 0은 아스키코드 48의 값을 갖기 때문에 특성 숫자값이 '3'처럼 문자로 입력됐을 경우 x-48을 해주면 숫자 3의 값으로 다룰 수 있다 !!

추가로 대문자 A-Z는 아스키코드 65-90, 소문자 a-z는 아스키코드 97-122의 값을 갖는다는 것도 알아두자

 

 

 

결과