https://www.acmicpc.net/problem/1935
#문제 풀기 위해 알아야 할 개념 :
1_ C언어 풀이1 : 이진트리 이용 / C++ 풀이2 : 스택을 이용한 풀이 (참고[https://kojammin.tistory.com/42])
2_ 스택 풀이 논리 :
- 입력된 문자열을 역순(이진트리 풀이)이 아닌, 순행(스택풀이) 순서로 SCAN
- 스택 : 피연산자를 보관할 공간
- 문자열 SCAN에서
ⓐ. 피연산자 : Push();
ⓑ. 연산자 : Pop() 2개 => Pop()된 두 피연산자를 반대로 계산해야 한다.
3_ ★ C++에서 double 값 => 소수점 둘째짜리까지 출력하는 법 : fixed 호출 => precision의 멤버함수 호출 사용
- cout << fixed; //fixed 객체 호출
- cout.precision(2);//precision() //메소드로 몇째짜리까지 출력할지 매개변수에 대입, 메소드 호출
##코드
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
|
#include <iostream>
#include <stack>
#include <string>
using namespace std;
void init() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
int main() {
init();
string postfix;
int alp[26] = { 0 };
int* arr = NULL;
int N;
stack<double> S;
cin >> N;
arr = new int[N];
cin.ignore();
cin >> postfix;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
for (int i = 0; i < postfix.length(); i++) {
char c = postfix[i];
if (isalpha(c)) {//피연산자라면,
//스택에 push
S.push(arr[c - 'A']);
}
else {//연산자라면,
double p1 = S.top();
S.pop();
double p2 = S.top();
S.pop();
double result = 0;
if (c == '+') {
result = p2 + p1;
}
else if (c == '-') {
result = p2 - p1;
}
else if (c == '*') {
result = p2 * p1;
}
else if (c == '/') {
result = p2 / p1;
}
S.push(result);
}
}
cout << fixed;
cout.precision(2);
cout << S.top() << '\n';
delete[] arr;
return 0;
}
|
cs |
'백준(C++) > 자료구조1' 카테고리의 다른 글
[BOJ/C++]10820번_문자열 분석 (0) | 2024.07.19 |
---|---|
[BOJ/C++]1918번_후위 표기식(중위표기->후위표기변환)(작성중..) (0) | 2024.07.19 |
[BOJ/C언어]1935번_후위 표기식2 (0) | 2024.07.18 |
[BOJ/C++]17299_오등큰수(작성중) (2) | 2024.07.17 |
[BOJ/C++]17298_오큰수 (작성중..) (2) | 2024.07.15 |