본문 바로가기

algorithm

백준 1935번 후위 표기식2, C++ 소수점 출력

https://www.acmicpc.net/problem/1935

 

아이디어:

1. 각 알파벳에 대응하는 수를 26 크기의 double 형 배열로 입력받는다.

2. string으로 후위 표기식을 입력받고, char 형 스택을 사용한다.

3. 알파벳이 들어오면 스택에 삽입하고, 연산자가 들어오면 스택에서 값을 2개 꺼내서 계산한다.

4. 마지막에 스택에 남은 값을 출력한다.

5. 소수점 출력: fixed는 소수점을 고정해서 출력하겠다는 의미이고, precision()는 소수점 아래 자리수를 이야기하며 그 아래는 자동 반올림된다.

	cout << fixed;
	cout.precision(2);
	cout << S.top();

 

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int main() {

	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	string calc;
	stack<double> S;
	double a, b, ans = 0;
	int n;
	double arr[26];
	fill(arr, arr + 26, 0);
	cin >> n;
	cin >> calc;
	
	for (int i = 0; i < n; i++)
		cin >> arr[i];
	
	for (auto i : calc) {
		switch (i) {
		case '+':
			b = S.top();
			S.pop();
			a = S.top();
			S.pop();
			S.push(a + b);
			break;

		case '-':
			b = S.top();
			S.pop();
			a = S.top();
			S.pop();
			S.push(a - b);
			break;

		case '*':
			b = S.top();
			S.pop();
			a = S.top();
			S.pop();
			S.push(a * b);
			break;

		case '/':
			b = S.top();
			S.pop();
			a = S.top();
			S.pop();
			S.push(a / b);
			break;

		default:
			S.push(arr[i - 'A']);
			break;
		}
	}

	cout << fixed;
	cout.precision(2);
	cout << S.top();

	return 0;

}