알고리즘/SW Expert Academy
1222.계산기1
IMyoungho
2020. 3. 23. 21:59
이번문제는 후위계산식으로 만들어서 계산하는 문제이다.
그렇게 어려운 난이도는 아니였다. 후위계산법을 제대로 이해하고 문제를 풀면된다.
연산자가 '+' 만 주어졌기 때문에 예외처리할게 많지 않았다.
아마 문제에 숫자가 붙은걸로봐서 앞으로 연산자들이 추가될 것 같은 예감이 든다ㅋㅋㅋ
허접한 코드로 일단 푸는 것에 의의를 두었다.
< Code 설명 >
#include <iostream>
#include <stack>
#include <queue>
#include <string.h>
using namespace std;
int main()
{
int n;
for(int k=1; k<=10; k++){
cin >> n;
string str;
cin >> str;
stack <char>s1;
queue<char>s2;
char v;
for(int i=0; i<n; i++){
if(str[i]=='+'){
if(!s1.empty()){
if(!memcmp(&s1.top(),&str[i],1)){
s2.push(v);
s1.pop();
}
}
s1.push(str[i]);
v = s1.top();
}
else
s2.push(str[i]);
if(i==n-1){
s2.push(s1.top());
s1.pop();
}
}
int ans=s2.front()-48, a=0;
s2.pop();
while(!s2.empty()){
if(s2.front()=='+'){
ans+=a;
s2.pop();
}
else {
a=s2.front()-48;
s2.pop();
}
}
cout << "#"<< k << " " << ans << endl;
}
return 0;
}
-> 풀긴풀었는데 뭔가 더러운 느낌.. ㅋㅋㅋ
앞으로 예상했던 예외처리가 늘어날 때 깔끔하게 짜야겠다ㅎㅎ
반응형