문제링크 : https://www.acmicpc.net/problem/1918

 

 

 

알고리즘

1. 문자면 출력값에 더해주고 여는 괄호면 스택에 push , 닫히는 괄호면 스택이 비거나 top이 여는 괄호 일 때까지 pop     하면서 출력값에 더해줌.

2.사칙연산을 처리 해준다.

 

 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include<iostream>
#include <stack>
 
using namespace std;
 
int main() {
   string str;
   cin >> str;
 
   string result;
   stack<char> s;
 
 
   for (int i = 0; i < str.length(); i++) {
      //문자면 출력값에 더함.
      if ('A' <= str[i] && str[i] <= 'Z') {
         result += str[i];
      }
 
      else {
         //여는 괄호 면 스택에 push
         if (str[i] == '(') {
            s.push(str[i]);
         }
         //닫히는 가로면 스택이 비거나 top 이 '(' 일떄까지
         //pop 하면서 결과값에 더해줌.
         else if (str[i] == ')') {
            while (!s.empty() && s.top() != '(') {
               result += s.top();
               s.pop();
            }
            //마지막에 여는괄호 pop
            if (!s.empty())
               s.pop();
         }
         //사칙연산
         else if (str[i] == '*' || str[i] == '/') {
            while (!s.empty() && (s.top() == '*' || s.top() == '/')) {
               result += s.top();
               s.pop();
            }
            s.push(str[i]);
         }
         else if (str[i] == '+' || str[i] == '-') {
            while (!s.empty() && s.top() != '(')
            {
               result += s.top();
               s.pop();
            }
            s.push(str[i]);
         }
      }
   }
 
   while (!s.empty()) {
      result += s.top();
      s.pop();
   }
 
   cout << result << "\n";
}
 
cs

'c++ > 백준' 카테고리의 다른 글

백준 14500번 : 테트로미노  (0) 2020.03.25
백준 2841번 외계인의 기타연주  (0) 2019.11.21
백준 5397 키로거  (0) 2019.11.21
백준 2493번 : 탑  (0) 2019.11.20
백준 10799번 쇠막대기  (0) 2019.11.20
ariz1623