반응형
C++ 풀이
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
string input;
vector<char> result;
vector<char> op;
cin >> input;
for(int i = 0; i<input.length(); i++)
{
if(input[i]>='A' && input[i] <='Z')
{
//알파벳은 바로 출력할거고
result.push_back(input[i]);
}
else{
if(op.size() ==0) {
// 아무것도 없으면 그냥 넣으면 된다.
op.push_back(input[i]);
}else{
if(input[i] == '(') op.push_back(input[i]);
else if(input[i] ==')') {
// (를 만날때까지 pop하는 과정.
while(op.back() != '(')
{
result.push_back(op.back());
op.pop_back();
}
op.pop_back(); //pop '('
}
else if(input[i] == '+' || input[i] =='-')
{
//+와 -는 (를 만날때까지 빼내거나, 혹은 빌때까지 빼낸다.
while(op.back() !='(' && !op.empty())
{
result.push_back(op.back());
op.pop_back();
}
//다 빼내면 자신을 넣는다.
op.push_back(input[i]);
}
else if(input[i]=='*' || input[i] == '/')
{
//*,/는 자신과 동일한 우선순위를 가지는 *,/를 만날때까지 빼고
//비지는 않아야한다.
while(op.back() == '*' || op.back() == '/'&&!op.empty())
{
result.push_back(op.back());
op.pop_back();
}
//다 빼내면 자신을 넣는다.
op.push_back(input[i]);
}
}
}
}
while(!op.empty()){
//for문이 끝났음에도 불구하고 남아있는 op를 처리해준다.
result.push_back(op.back());
op.pop_back();
}
//결과 출력
for(int i = 0 ; i<result.size();i++)
{
cout << result[i];
}
}
반응형
'Algorithm > Problem Solve' 카테고리의 다른 글
[백준 2206번] 벽부수고 이동하기 (C++,BFS 변형) (0) | 2021.02.17 |
---|---|
[백준 1967번] 트리의 지름 (C++, 다익스트라) - python으로 풀어볼것. (0) | 2021.02.16 |
[백준 1865번] 웜홀 (재풀이 필요(시간초과) C++,벨만포드 풀이완료.) (0) | 2021.02.10 |
[백준 13549번] 숨바꼭질 3(C++, priority_queue<pair>정렬) (0) | 2021.02.09 |
[백준 9663번] N-Queen(C++) (0) | 2021.02.08 |