BOJ - 1935번 후위 표기식 2 (C++)

woga·2020년 12월 3일
1

BOJ

목록 보기
77/83
post-thumbnail

문제 출처: https://www.acmicpc.net/problem/1935

난이도

Silver 3


접근법

후위 표기식이란? 중위 표기식과 다르게 연산 부호가 후위에 있는 것을 말한다.
스택을 이용해 계산해주면 되는데, stack 특성상 먼저 나온게 B고 그 다음으로 나온걸 A라고 하고 계산하면 쉽다. EX) A/B


통과 코드

#include <iostream>
#include <string>
#include <cstring>
#include <stack>

using namespace std;

double arr[30];
stack<double> ans;

int main() {
	int N;
	cin >> N;
	string str;
	cin >> str;
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}
	for (int i = 0; i < str.size(); i++) {
		if (str[i] >= 'A' && str[i] <= 'Z') {
			ans.push(arr[str[i] - 'A']);
		}
		else {
			double b = ans.top();
			ans.pop();
			double a = ans.top();
			ans.pop();
			if (str[i] == '*') {
				ans.push(a * b);
			}
			else if (str[i] == '+') {
				ans.push(a + b);
			}
			else if (str[i] == '-') {
				ans.push(a - b);
			}
			else {
				ans.push(a / b);
			}
		}
	}
	
	printf("%.2lf", ans.top());
	return 0;
}

피드백

자꾸 틀려서 아 뭔데? 했다가 데이터형을 double로 바꾸니깐 통과됐다. 처음에 100까지래서 float(소수 6~8자리)으로 충분하겠지 했는데 착각이었다.. 0.3333나오는경우가 있어도 어차피 2자리만 나오니깐.. 흠 다음부턴 안전빵으로 처음부터 double로 선언해야겠다

profile
와니와니와니와니 당근당근

0개의 댓글