알고리즘/백준
[백준] 후위 표기식2 1935번 C++ 풀이
승민아
2022. 3. 31. 20:51
https://www.acmicpc.net/problem/1935
전체 코드
#include <iostream>
#include <stack>
using namespace std;
stack<double> s;
string str;
int arr[26];
int N;
double cal(char c)
{
double op1, op2;
op2 = s.top();
s.pop();
op1 = s.top();
s.pop();
switch (c)
{
case '+':
return op1 + op2;
case '-':
return op1 - op2;
case '*':
return op1 * op2;
case '/':
return op1 / op2;
}
}
int main(void)
{
cout << fixed;
cout.precision(2);
cin >>N>>str;
for (int i = 0; i < N; i++)
{
int num;
cin >> num;
arr[i] = num;
}
for (int i = 0; i < str.length(); i++)
{
if (str[i] >= 'A' && str[i] <= 'Z')
s.push(arr[str[i] - 'A']);
else
s.push(cal(str[i]));
}
cout << s.top();
}
먼저 C++에서 소수점 고정시키는 방법
cout.precision(2);
위의 코드는 정수부분 소수점 부분 모두 포함해서 몇 자릿수를 나타낼지 정하는 것
4일 경우 XX.XX로 표시된다.
cout<<fixed;를 추가해준다면 소수점만 고정시킬 수 있다.
cout << fixed;
cout.precision(2);
이제 무조건 소수점 123415.XX처럼 2자리로 나온다.
먼저 아래의 코드를 설명하겠습니다.
for (int i = 0; i < N; i++)
{
int num;
cin >> num;
arr[i] = num;
}
N개만큼 A부터 순서대로 N개의 알파벳에 대응하는 값을 입력해줍니다.
for (int i = 0; i < str.length(); i++)
{
if (str[i] >= 'A' && str[i] <= 'Z')
s.push(arr[str[i] - 'A']);
else
s.push(cal(str[i]));
}
입력받은 str 길이만큼 돌건대
영어 대문자 알파벳이라면 해당하는 값을 스택에 넣어줍니다.
연산자라면 cal함수에 그 연산자를 넘겨줍니다.
그 후 반환된 값을 스택에 넣어줍니다.
double cal(char c)
{
double op1, op2;
op2 = s.top();
s.pop();
op1 = s.top();
s.pop();
switch (c)
{
case '+':
return op1 + op2;
case '-':
return op1 - op2;
case '*':
return op1 * op2;
case '/':
return op1 / op2;
}
}
해당하는 연산자로 계산을 하여 값을 return 합니다.
먼저 꺼낸 것이 op2, 두번째로 꺼낸것이 op1입니다.
cout << s.top();
최종적으로 스택의 마지막 원소가 결괏값이 들어있습니다.