문제 링크입니다: https://www.acmicpc.net/problem/1935
자료구조 시간에 후위표기식을 이용한 계산기를 만들어 봤기 때문에 쉽게 접근할 수 있었습니다.
알고리즘은 아래와 같습니다.
1. 해당 인덱스가 연산자일 경우 스택에서 숫자 두 개를 꺼냅니다.
-> 두 번째로 꺼낸 숫자가 사실 먼저 나온 숫자이기 때문에 연산을 두 번째 숫자를 기준으로 합니다.
2. 해당 인덱스가 피연산자일 경우 스택에 추가합니다.
3. 반복문을 통해 1 혹은 2를 수행하면 결과는 스택의 top에 저장되어있습니다. 따라서 스택의 top을 출력해주면 됩니다.
#include <iostream>
#include <string>
#include <stack>
#include <iomanip>
using namespace std;
const int MAX = 26;
int alphabet[MAX];
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
string str;
cin >> str;
for (int i = 0; i < N; i++)
cin >> alphabet[i];
stack<double> s;
for (int i = 0; i < str.length(); i++)
{
//operator
if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/')
{
//두개의 피연산자를 꺼내고 연산
double a = s.top();
s.pop();
double b = s.top();
s.pop();
switch (str[i])
{
case '+':
s.push(b + a);
break;
case '-':
s.push(b - a);
break;
case '*':
s.push(b * a);
break;
case '/':
s.push(b / a);
break;
}
}
//operand
else
s.push(alphabet[str[i] - 'A']);
}
double result = s.top();
cout << fixed;
cout.precision(2);
cout << result << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 3015번 오아시스 재결합 (2) | 2018.09.08 |
---|---|
백준 2841번 외계인의 기타 연주 (0) | 2018.09.08 |
백준 1918번 후위표기식 (2) | 2018.09.08 |
백준 1725번 히스토그램 (0) | 2018.09.08 |
백준 3986번 좋은 단어 (0) | 2018.09.08 |