Study/자료구조
Postfix 수식계산(백준 1935/C++)
coldtruthk
2024. 10. 12. 16:30
후위표기식?
후위표기식은 연산자가 피연산자 뒤에 오는 수식 표기법이다.
예를 들어,
- 중위 표기식: A+B
- 후위 표기식: AB+
#include <iostream>
#include <stack>
#include <string>
#include <iomanip> // 소수점 출력을 위한 라이브러리
using namespace std;
int main() {
int N;
cin >> N;//피연산자의 개수 입력받기
string expression;//후위 표기식이 문자들로 이루어진 문자열이다.
//피연산자는 A,B,C와 같은 문자로 표현, 연산자는 +,-,*,/로 표현=> 두 종류의 문자들이 모여 하나의 후위 표기식을 이루므로, string이 적합하다.
cin >> expression;
double values[26];//피연산자 A~Z의 값을 저장할 배열
for (int i = 0; i < N; i++) {
cin >> values[i];
}//피연산자에 각각의 숫자를 할당
stack<double> st;//계산을 위한 스택
for (char ch : expression) {//ch는 expression문자열의 각 문자를 하나씩 담을 변수, :는 C++에서 컬렉션을 순환할 때 사용
//expression문자열을 순회하면서 각 문자를 ch에 담아 처리한다.
if (ch >= 'A' && ch <= 'Z') {
//피연산자일 경우 스택에 해당 값 푸시
st.push(values[ch - 'A']);
}
else {
//연산자일 경우 스택에서 두개의 피연산자를 꺼내서 연산
double b = st.top();//st.top()은 스택의 맨 위에 있는 값을 가져오는 함수
st.pop();
double a = st.top();
st.pop();
if (ch == '+') {
st.push(a + b);
}
else if (ch == '-') {
st.push(a - b);
}
else if (ch == '*') {
st.push(a * b);
}
else if (ch == '/') {
st.push(a / b);
}
}
}
cout << fixed << setprecision(2) << st.top() << endl;
//fixed: 소수점 이하 자리수를 고정하여 출력할 때 사용 suprecision: 소수점 이하 자리수를 설정하는 조작자
}