Hayden's Archive

[알고리즘] 백준 - 1935번 : 후위 표기식2 본문

Algorithm

[알고리즘] 백준 - 1935번 : 후위 표기식2

_hayden 2020. 7. 11. 19:48

알고리즘 문제 출처 : https://www.acmicpc.net/problem/1935

 

1935번: 후위 표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이��

www.acmicpc.net

관련 문제 포스팅 : https://hayden-archive.tistory.com/276

 

내가 작성한 코드

후위 표기식 문제를 풀고 풀었더니 쉽게 풀 수 있었던 문제.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int n = Integer.parseInt(br.readLine());
		double[] operand = new double[n]; //숫자 피연산자를 저장
		char[] inputVal = br.readLine().toCharArray(); //후위 표기식을 저장
		Stack<Double> stack = new Stack<>(); //후위 표기식의 알파벳을 통해 도출한 숫자 피연산자를 저장
		for(int i=0; i<n; i++) {
			operand[i] = Integer.parseInt(br.readLine());
		}
		for(int i=0; i<inputVal.length; i++) {
			if(Character.isAlphabetic(inputVal[i])) {//알파벳이라면
				int index = (int)inputVal[i]-65;
				stack.push(operand[index]);
			}else {//연산자라면
				Double result = 0.d;
				Double pop1 = stack.pop();
				Double pop2 = stack.pop();
				if(inputVal[i]=='+') {
					result = pop2 + pop1;
				}
				if(inputVal[i]=='-') {
					result = pop2 - pop1;
				}
				if(inputVal[i]=='*') {
					result = pop2 * pop1;
				}
				if(inputVal[i]=='/') {
					result = pop2 / pop1;
				}
				stack.push(result);
			}
		}
		System.out.format("%.2f", stack.pop());
	}
}