반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - 후위 표기식2 (1935)
1935번: 후위 표기식2
첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이
www.acmicpc.net
[ 문제 ]
후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. 3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 100보다 작거나 같은 자연수이다.
후위 표기식을 앞에서부터 계산했을 때, 식의 결과와 중간 결과가 -20억보다 크거나 같고, 20억보다 작거나 같은 입력만 주어진다.
[ 출력 ]
계산 결과를 소숫점 둘째 자리까지 출력한다.
[ 코드 ]
#include<iostream> #include<algorithm> #include<stack> #include<iomanip> // setprecision을 위해 using namespace std; int operand[26]; // operand[0] : A ~ operand[25] : Z // operand : 피연산자 (연산의 대상) int main() { int N; // 피연산자의 개수 cin >> N; string input; // 값 cin >> input; for (int i = 0; i < N; i++) { cin >> operand[i]; } stack <double> s; // 나눗셈 연산으로 소수점이 나올 수 있으므로 double로 선언 for (char ch : input) { if (ch >= 'A' && ch <= 'Z') // 입력값이 알파벳 대문자면 { s.push(operand[ch - 'A']); // 스택에 해당 값 입력 } else // 그 외에 연산이라면 { // 스택 가장 위에 있는 값 두개 꺼내기 double op2 = s.top(); s.pop(); double op1 = s.top(); s.pop(); // int형 나누기의 소수점의 값을 구하려면, double형으로 바꿔야 한다 // 즉 나눗셈을 할 때는 변수를 double형으로 해줘야 한다. // 만약 연산자가 +라면 if (ch == '+') { s.push(op1 + op2); // 연산 값을 다시 계산해서 스택에 넣기 } // 만약 연산자가 -라면 else if (ch == '-') { s.push(op1 - op2); } // 만약 연산자가 *라면 else if (ch == '*') { s.push(op1 * op2); } // 만약 연산자가 /라면 else if (ch =='/') { s.push(op1 / op2); } } } cout << fixed << setprecision(2) <<s.top() << '\n'; // cout << fixed : 소수점 자리 수 고정 // cout << setprecision(2) : 가장 큰 자리수부터 2자리를 출력하겠다는 뜻 (정수 범위도 포함) - 따라서 6.2 출력 // cout<< fixed << setprecision(2) : 소수점 아래 숫자의 출력 범위만 2자리로 설정하겠다는 뜻 return 0; }
반응형
'문과 코린이의, [C. C++] 기록 > C++ 백준 문제풀이' 카테고리의 다른 글
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 알파벳 개수 (10808) (0) | 2021.07.29 |
---|---|
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 후위 표기식 (1918) (0) | 2021.07.29 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - 타일 채우기 (2133) (0) | 2021.07.27 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - 연속합 2 (13398) (0) | 2021.07.26 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - 가장 긴 바이토닉 부분 수열 (11054) (0) | 2021.07.26 |