✔️ 후위 표기식이란?
후위 표기식은 연산자 우선순위나 괄호 없이도
연산 순서가 정확이 결정되도록 만드는 표기법을 말합니다.
만약 3*(5+2)-9 을 후위연산식으로 표현하면 어떻게 되나요?
3 (5 + 2) - 9 이라는 중위 표기식을 후위 표기식으로 바꿔보겠습니다.
✅ 중위 표기식:
3 (5 + 2) - 9
🔄 변환 순서:
괄호 먼저 계산: (5 + 2) → 후위로 바꾸면 5 2 +
그 다음에 3 (결과) → 3 5 2 +
마지막으로 - 9 → 3 5 2 + * 9 -
✅ 결과: 후위 표기식 (Postfix)
3 5 2 + * 9 -
💡 후위 표기식의 특징:
괄호가 필요 없음
연산자의 우선순위는 위치로 결정
스택을 이용해서 쉽게 계산할 수 있음
🔄 후위표기 변환 규칙 (정리)
연산자 종류 후위 구조
a + b a b +
a (b + c) a b c +
a b - c a b c -
a (b + c) - d a b c + d -
💬 결론
연산자가 "항상 자신의 피연산자 뒤에 온다"는 말은,
자신이 적용되는 두 값(왼쪽과 오른쪽)이 먼저 나오고,
그 다음 연산자가 온다는 의미입니다.
후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 3(5+2)-9 을 후위연산식으로 표현하면 352+9- 로 표현되며 그 결과는 12입니다.
첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다.
식은 1~9의 숫자와 +, -, *, / 연산자로만 이루어진다.
연산한 결과를 출력합니다.
352+*9-
12
public class Main {
public int solution(String str) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for(char c : str.toCharArray()) {
if(Character.isDigit(c)) {
stack.push(c - 48);
} else {
int rt = stack.pop();
int lt = stack.pop();
if(c =='+') {
stack.push(lt+rt);
} else if(c=='-') {
stack.push(lt-rt);
} else if(c=='*') {
stack.push(lt*rt);
} else if(c=='/') {
stack.push(lt/rt);
}
}
}
return stack.pop();
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(T.solution(str));
}
}