(백준 알고리즘 문제풀이) 1935번 후위 표기식2
by 줌코딩
문제
문제 접근
- 이 문제는 후위 순회를 떠올려서 처음에는 트리를 이용하려고 했으나 생각해보니 연산자를 만났을 때 그 전의 연산된 두 수를 연산해주기만 하며 된다.
- 이를 위해 스택을 사용했다.
코드
#include <cstdio>
#include <stack>
using namespace std;
int arr[101], n, cnt;
char s[101];
int main(){
scanf("%d", &n);
scanf("%s", s);
stack<double> st;
for(int i = 0; i < n; i++)scanf("%d", &arr[i]);
for(int i = 0; s[i] != '\0'; i++){
char c = s[i];
if(c <= 'Z' && c >= 'A')st.push(arr[c-'A']);
else {
double y = st.top(); st.pop();
double x = st.top(); st.pop();
if(c == '*')st.push(x*y);
else if(c == '+')st.push(x+y);
else if(c == '-')st.push(x-y);
else st.push(x/y);
}
}
printf("%.2f", st.top());
}
느낀점
- 문제를 보고 폭넓은 접근방법을 떠올리도록 단어에 대한 선입견은 내려놓자!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Subscribe via RSS