개발자 미니민의 개발스터디

[자료구조-스택] 후위 표기법이란? (백준 1935번)

by mini_min

💡 👍🏻 후위식은 연산자를 피연산자 뒤에 놓고 표기하는 방법이다.
  • 3 10 * → (피연산자) (피연산자) (연산자)

 

중위 표기법이란?

숫자와 숫자 사이에 연산자를 넣어서 식을 표현하는 것이다.

피연산자 사이에 연산자가 위치하는 식을 중위 표기법이라고 한다.

 

후위 표기법이란?

후위 표기법은 연산자가 피연산자 뒤에 위치한다.

i++ , a++ 11+ 와 같이 표현하는 것을 후위 표기법이라고 한다.

💡 중위 표기법은 사람이 이해하기 쉽게 표현하는 방법이라면, 후위 표기법은 컴퓨터가 연산을 하기 쉽게 표현하는 방법이다.

 

후위 표기법을 계산하는 방법

1. 숫자(피연산자) 는 스택에 넣는다.
2. 연산자가 나오면 숫자 2개를 pop 해서 계산한다.
3. 계산한 결과(result) 를 다시 스택에 넣는다. 

 

후위 표기법2 (백준 1935번 문제 )

package baekjoon;

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

public class _1935 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		String s = br.readLine();
		double [] arr = new double[n];
		for(int i=0; i<arr.length; i++) {
			arr[i] = Double.parseDouble(br.readLine());
		}
		
		Stack<Double> stack = new Stack<>();
		
		double result = 0;
		for(int i=0; i<s.length(); i++) {
			char c = s.charAt(i);
			if(c < 'A' || c > 'Z') { //연산자라면
				double p1 = stack.pop();
				double p2 = stack.pop();
				
				if(c=='+') {
					result = p2 + p1;
				} else if(c=='-') {
					result = p2 - p1;
				} else if(c=='*') {
					result = p2 * p1;
				} else if(c=='/') {
					result = p2 / p1;
				}
				
				stack.push(result);
				
			} else { //피연산자라면 
				stack.push(arr[s.charAt(i)-'A']);
			}
		}
		
		System.out.printf("%.2f",stack.pop());
		
	}

}

 

느낀 점

자료구조 파트 쪽 문제를 풀다보니, 새로운 개념 지식이 쌓이는 것 같다.

여러 문제를 풀어갈수록 스택...정말 여기저기 잘 활용되는 친구군...🤭 이란 생각이 든다.  

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기