algorithm
후위식 연산(postfix)
juuuuuuun
2024. 5. 24. 17:51
설명
후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며 그 결과는 12입니다.
입력
첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다.
식은 1~9의 숫자와 +, -, *, / 연산자로만 이루어진다.
출력
연산한 결과를 출력합니다.
예시 입력 1
352+*9-
예시 출력 1
12
소스 코드 1
import java.util.Scanner;
import java.util.Stack;
//후위식 연산
public class Main {
public static int solution(String str) {
int ans=0;
Stack<Integer> stack = new Stack<>();
for (Character x : str.toCharArray()) {
if ('0' <= x && x <= '9') { //숫자라면 스택에 추가
stack.push(x - '0');
} else { // 연산자 일시
if (stack.size() >= 2) { //숫자가 2개 이상 있어야 연산이 가능함
int sum = 0;
switch (x) {
case '+':
sum = stack.get(stack.size() - 2) + (stack.get(stack.size() - 1));
stack.pop();
stack.pop();
stack.push(sum);
break;
case '-':
sum = stack.get(stack.size() - 2) - stack.get(stack.size() - 1);
stack.pop();
stack.pop();
stack.push(sum);
break;
case '*':
sum = stack.get(stack.size() - 2) * (stack.get(stack.size() - 1));
stack.pop();
stack.pop();
stack.push(sum);
break;
case '/':
sum = stack.get(stack.size() - 2) / stack.get(stack.size() - 1);
stack.push(sum);
stack.pop();
stack.pop();
break;
}
}
}
}
ans = stack.get(0);
return ans;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
}
소스 코드 2
import java.util.Scanner;
import java.util.Stack;
//후위식 연산 다른풀이
public class Main {
public static int solution(String str) {
int ans=0;
Stack<Integer> stack = new Stack<>();
for (Character x : str.toCharArray()) {
if (Character.isDigit(x)) { //숫자라면 스택에 추가
stack.push(x - '0');
} else { // 연산자 일시
if (stack.size() >= 2) { //숫자가 2개 이상 있어야 연산이 가능함
int lt = 0; //스택 맨 위에서 2번째 숫자 저장
int rt = 0; //스택 맨 위의 숫자 저장
switch (x) {
case '+':
rt = stack.pop();
lt = stack.pop();
stack.push(lt + rt);
break;
case '-':
rt = stack.pop();
lt = stack.pop();
stack.push(lt - rt);
break;
case '*':
rt = stack.pop();
lt = stack.pop();
stack.push(lt * rt);
break;
case '/':
rt = stack.pop();
lt = stack.pop();
stack.push(lt / rt);
break;
}
}
}
}
ans = stack.get(0);
return ans;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
}
Character.isDigit(x)
- char형 데이터가 숫자라면 true 리턴