후위 연산식 계산하기
문제
설명
후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 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));
}
}