후위 표현식 계산하기
후위 표현식으로 만들고, 그 후위 표현식을 계산할려면
기본 개념은 이렇다.
stack 구조를 하나 만들고
후위 표현식으로 바꾼 문자열을 순서대로 읽었을때 들어가는 글자 하나 하나가 만약 숫자면 스택에 두고 연산자 이면 스택에 쌓은 숫자를 2개 꺼내서 계산하고 다시 스택에 저장하는 방식으로 계산한다.
이때 중요한점은 먼저 꺼내는 값이 num2 즉 저기 연산에서 2-8// 8에 들어 가야한다 그리고 다음에 꺼내는 값이 num1에 들어가고 계산해서 다시 스택에 쌓아주면 된다.
package com.ssafy.algo5;
/**
* 후위 표기식을 계산해서 출력하기
*
* input:
* 6 5 2 8 - * 2 / +
*
* output:
* -9
*
*/
import java.util.Scanner;
public class Z18_Cal3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] str = sc.nextLine().split(" ");
int[] stack = new int[str.length];
int top =-1;
for(int i = 0; i<str.length; i++) {
char c = str[i].charAt(0);
int num1, num2;
switch (c) {
case '+':
num2 = stack[top--];
num1 = stack[top--];
stack[++top]=num1 + num2;
break;
case '-':
num2 = stack[top--];
num1 = stack[top--];
stack[++top]=num1 - num2;
break;
case '*':
num2 = stack[top--];
num1 = stack[top--];
stack[++top]=num1 * num2;
break;
case '/':
num2 = stack[top--];
num1 = stack[top--];
stack[++top]=num1 / num2;
break;
default:
stack[++top] =Integer.parseInt(str[i]);
break;
}
}
System.out.println(stack[top--]);
}
}
'알고리즘' 카테고리의 다른 글
BufferedReader 로 입출력 속도 단축하기 (0) | 2019.01.23 |
---|---|
Queue -java (0) | 2019.01.23 |
후위 표현식 만들기 (stack) - java (0) | 2019.01.22 |