문제 풀이 (JAVA)
import java.util.*;
public class part5_4 {
public static void main(String[] args) {
// 후위식 연산(postfix)
Scanner input = new Scanner(System.in);
String a = input.nextLine();
int answer = solution(a);
System.out.print(answer);
}
private static int solution(String a) {
int result=0;
Stack<Integer> stack = new Stack<>();
int sum=0;
int num1=0 , num2=0;
for(Character ch : a.toCharArray()) {
if(Character.isDigit(ch) == true) {
stack.push(Character.getNumericValue(ch));
}else {
if(ch == '+') {
num1= stack.pop();
num2= stack.pop();
sum =(num2 + num1);
stack.push(sum);
}else if(ch == '-') {
num1= stack.pop();
num2= stack.pop();
sum =(num2 - num1);
stack.push(sum);
}else if(ch == '*') {
num1= stack.pop();
num2= stack.pop();
sum =(num2 * num1);
stack.push(sum);
}else if(ch == '/') {
num1= stack.pop();
num2= stack.pop();
sum =(num2 / num1);
stack.push(sum);
}
}
}
result = stack.pop();
return result;
}
}
주요 핵심 포인트
1. 숫자를 만날 시 스택에 추가한다.
2. 연산식을 만날 시 스택에서 두 개의 값을 추출하여 해당 연산자로 연산 후 다시 스택에 넣는다.
3. 1-2번을 반복한다.
개선해야할 사항
1. 후위식을 스택으로 풀 수 있을 줄은 몰랐다. 후위식이 어떻게 이루어져 있는지 다시 한번 개념을 찾아 보고 나서 풀 수 있었던 문제이다. 다음부터는 후위식의 풀이식을 자연스럽게 생각하도록 해보자.
'알고리즘' 카테고리의 다른 글
[큐] 공주 구하기 (인프런 알고리즘 5-6) (0) | 2022.06.26 |
---|---|
[스택] 쇠막대기 (인프런 알고리즘 5-5) (0) | 2022.06.26 |
[스택+이차원행렬] 크레인 인형뽑기(카카오) (인프런 알고리즘 5-3) (0) | 2022.06.19 |
[스택] 괄호문자제거 (인프런 알고리즘 5-2) (0) | 2022.06.19 |
[스택] 올바른 괄호 (인프런 알고리즘 5-1) (0) | 2022.06.19 |