728x90
https://www.acmicpc.net/problem/1935
문제 풀이
대표적인 스택 문제이다.
보통 중위 표기식을 후위 표기식으로 바꿀 때에는 연산자를 스택에 넣어서 구현한다.
하지만 이렇게 계산하는 경우에는 스택에 피연산자를 넣어야 한다.
반복문을 통해서 String을 돌아볼 건데 str[i]가 연산자라면
스택 맨위의 피연산자 두 개를 가져와서 연산을 해준다.
스택은 먼저 들어간 data가 나중에 나오는 구조이기 때문에 나중에 pop 하는 값이 기준이 된다.
느낀 점
쉬운 문제인데 스택에 어떤 값을 넣을지를 몰라 살짝 헤맨 것 같다. 자료 구조 관련한 문제를 더 많이 풀어봐야 할 것 같다.
코드
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int n, int num[27];
stack<double> s;
string str;
double ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> str;
for (int i = 0; i < n; i++) {
cin >> num[i];
}
for (int i = 0; i < str.length();i++) {
if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/') {
double y = s.top();
s.pop();
double x = s.top();
s.pop();
if (str[i] == '+') {
s.push(x + y);
}
else if (str[i] == '-') {
s.push(x - y);
}
else if (str[i] == '*') {
s.push(x * y);
}
else {
s.push(x / y);
}
}
else {
s.push(num[str[i] - 'A']);
}
}
ans = s.top();
printf("%.2f", ans);
}
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[C++] 백준 2346번 : 풍선 터뜨리기 (0) | 2021.10.04 |
---|---|
[C++] 백준 10799번 : 쇠막대기 (0) | 2021.10.04 |
[C++] 백준 1158번 : 요세푸스 문제 (0) | 2021.09.24 |
[C++] 백준 16236번 : 아기 상어 (0) | 2021.09.15 |
[C++] 백준 18111번 : 마인크래프트 (0) | 2021.08.30 |
댓글