알고리즘
백준 1935 - 후위 표기식
스파이더웹
2022. 7. 27. 00:01
728x90
반응형
후위 표기식 문제이다 후위 표기식이란 연산자가 피연산자 뒤의 위치하는 것을 의미한다
Stack을 활용한다
이제 문제를 살펴보자
문제에서 후위표기식 문자열이 주어지는데 문자열 중 알파벳은 주어지는 숫자와 1:1 매핑관계이다
그러므로 문제에서는 A일 경우 숫자 1을 스택에 넣어주면된다
연산자일 경우 스택에 넣은 값을 끄내 해당연산을 시행한후 값을 다시 스택에 넣어준다
결과 값을 또 다른연산을 만났을경우 계산을 반복하면된다
import java.util.Scanner;
import java.util.Stack;
public class C {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String str = scanner.next();
double[] arr = new double[n];
Stack<Double> st = new Stack<>();
for(int i=0; i<n; i++){
arr[i] = scanner.nextDouble();
}
for(int i=0; i<str.length(); i++){
if(Character.isAlphabetic(str.charAt(i))){
st.push(arr[str.charAt(i) - 'A']);//알파벳에 해당하는 아스키코드 - 65를하여 배열 arr[인덱스]번호를 확인할 수 있다
}else if(str.charAt(i)=='+'){
double temp1 = st.pop();//마지막 앞전에 넣은 숫자를 끄내온다
double temp2 = st.pop();//마지막에 넣은 숫자를 끄내온다
double temp3 = temp2 + temp1; //계산한다
st.push(temp3);//결과 값을 스택어 넣어준다 반복한다
}else if(str.charAt(i)=='-'){
double temp1 = st.pop();
double temp2 = st.pop();
double temp3 = temp2 - temp1;
st.push(temp3);
}else if(str.charAt(i)=='/'){
double temp1 = st.pop();
double temp2 = st.pop();
double temp3 = temp2 / temp1;
st.push(temp3);
}else if(str.charAt(i)=='*'){
double temp1 = st.pop();
double temp2 = st.pop();
double temp3 = temp2 * temp1;
st.push(temp3);
}
}
System.out.printf("%.2f",st.pop());
}
}
결과
6.20
728x90
반응형