[자료구조-스택] 후위 표기법이란? (백준 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());
}
}
느낀 점
자료구조 파트 쪽 문제를 풀다보니, 새로운 개념 지식이 쌓이는 것 같다.
여러 문제를 풀어갈수록 스택...정말 여기저기 잘 활용되는 친구군...🤭 이란 생각이 든다.
'매일매일 알고리즘 공부 > 알고리즘 개념' 카테고리의 다른 글
[알고리즘] DP(Dynamic Programming) 이란? (DP 알고리즘) (0) | 2023.11.17 |
---|---|
[자료구조] 원형 큐(Circular Queue) 개념 (0) | 2023.10.23 |
[알고리즘] 좌표 압축 개념 (대소 관계로 정렬) (1) | 2023.10.16 |
[알고리즘] 에라토스테네스의 체 란? (Prime 소수 구하기) (0) | 2023.09.22 |
[알고리즘] 유클리드 호제법 (GCD) (0) | 2023.08.29 |
블로그의 정보
개발자 미니민의 개발로그
mini_min