[C++] 백준 1935: 후위 표기식2

Cyan·2024년 1월 27일
0

코딩 테스트

목록 보기
36/166

백준 1935: 후위 표기식2

문제 요약

후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오.

문제 분류

  • 자료 구조
  • 스택

문제 풀이

입력된 문자열의 앞에서부터 탐색하면서 연산자가 아닌 피 연산자를 차럐대로 스택에 넣으면 된다.

연산자를 만났을 경우에 스택에서 두 원소를 빼내서 알맞은 연산을 한 후 연산 결과값을 다시 스택에 넣는다.

피연산자의 경우에는 그에 해당하는 실 값을 ary배열에 저장하여, 해당 값을 스택에 넣도록 했다.

즉, ary[in[i]] - 65]push해주었다.

풀이 코드

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <stack>

using namespace std;

int main()
{
	stack<double> s;
	double ary[27] = { 0 };
	int n;
	double par1, par2;
	string in;

	cin >> n;
	cin >> in;
	for (int i = 0; i < n; i++)
		cin >> ary[i];

	for (int i = 0; i < in.length(); i++) {

		if (in[i] == '+') {
			par1 = s.top();
			s.pop();
			par2 = s.top();
			s.pop();
			s.push(par1 + par2);
		}
		else if (in[i] == '*') {
			par1 = s.top();
			s.pop();
			par2 = s.top();
			s.pop();
			s.push(par1 * par2);
		}
		else if (in[i] == '/') {
			par1 = s.top();
			s.pop();
			par2 = s.top();
			s.pop();
			s.push(par2 / par1);
		}
		else if (in[i] == '-') {
			par1 = s.top();
			s.pop();
			par2 = s.top();
			s.pop();
			s.push(par2 - par1);
		}
		else
			s.push(ary[in[i] - 65]);
	}
	printf("%.2lf", s.top());
	return 0;
}

0개의 댓글