https://www.acmicpc.net/problem/1918
#문제 풀기 위해 알아야 할 개념 :
1_ 핵심 개념 : 연산자를 보관할 Stack은 밑에서 Top()방향으로 우선순위가 낮->높 순서로 쌓여야 한다.
2_ ★코드 논리 순서(일단 암기) :
ⓐ. 알파벳 => 무조건 출력
ⓑ. ( => 무조건 Push()
ⓒ. ) => '(' 가 나올때 까지 Pop()
ⓓ. 나머지 우선순위를 가진 연산자 (높 => 낮) 순으로 한다.
3_ ★ⓒ(')')와ⓓ(우선순위를 가진 연산자) 처리 차이 기억
- ⓒ : S.top()=='('을 신경쓰고, '('는 출력을 안하고, 버림
- ⓓ : 지칭값 > 우선순위 => Push / 지칭값 <= 우선순위 => Pop() , ★그리고 '('을 신경 안써도 된다.
##코드
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#include <iostream>
#include <stack>
#include <string>
using namespace std;
void init() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
bool IsOp(char c) {
if (
c == '*' ||
c== '/'||
c == '+' ||
c == '-'||
c== '(' ||
c == ')'
) {
return true;
}
return false;
}
int GP(char op) {
if (op == '*' || op == '/') {
return 3;
}
else if (op == '+' || op == '-') {
return 2;
}
else if (op == '(' || op == ')') {
return 1;
}
return 0;
}
int VGP(char op1, char op2) {
return GP(op1) - GP(op2);
/*
+ : op1이 더 우선순위
0 : 같다.
- : op2가 더 우선순위
*/
}
int main() {
string text;
stack<char> S;
cin >> text;
for (int i = 0; i < text.length(); i++) {
char c = text[i];
//1_ 알파벳
if (!IsOp(c)) cout << c;
else {
if (c == '(')//2_ ( => 무조건 push
{
S.push(c);
}
else if (c == ')') //3_ ) => '('가 나타나기 전까지 모두 pop()
{
while (!S.empty() && S.top() != '(') {
cout << S.top();
S.pop();
}
if (!S.empty() && S.top() == '(') {
S.pop();
}
}
else//4_ 우선순위 쎈 : * || /
{
while (!S.empty() && VGP(c, S.top())<=0)//pop()하는 조건
{
cout << S.top();
S.pop();
}
S.push(c);//지칭값 push
}
}
}
while (!S.empty()) {
cout << S.top();
S.pop();
}
return 0;
}
|
cs |
'백준(C++) > 자료구조1' 카테고리의 다른 글
[BOJ/C++]11656번_접미사 배열 (0) | 2024.07.21 |
---|---|
[BOJ/C++]10820번_문자열 분석 (0) | 2024.07.19 |
[BOJ/C++]1935번_후위 표기식2_풀이2 (0) | 2024.07.18 |
[BOJ/C언어]1935번_후위 표기식2 (0) | 2024.07.18 |
[BOJ/C++]17299_오등큰수(작성중) (2) | 2024.07.17 |