반응형
같은 유형 3번째인데 왜 단번에 풀지를 못하니....
실수
1) result를 스택으로 잡은 것. => 숫자는 앞에서부터 분포하므로 벡터로 해서 인덱스 참조해야 됨.
2) +가 들어와서 temp 우선순위로 비울때 temp가 empty인 경우 생각 안하고 top 참조하려 한 것
3) 마지막에 num 스택에 result로 부터 숫자 넣을 때 문자이므로 -'0' 처리 안해 준것....
/////////////////////////////////////////////////////////////////////////////////////////////
// 기본 제공코드는 임의 수정해도 관계 없습니다. 단, 입출력 포맷 주의
// 아래 표준 입출력 예제 필요시 참고하세요.
// 표준 입력 예제
// int a;
// float b, c;
// double d, e, f;
// char g;
// char var[256];
// long long AB;
// cin >> a; // int 변수 1개 입력받는 예제
// cin >> b >> c; // float 변수 2개 입력받는 예제
// cin >> d >> e >> f; // double 변수 3개 입력받는 예제
// cin >> g; // char 변수 1개 입력받는 예제
// cin >> var; // 문자열 1개 입력받는 예제
// cin >> AB; // long long 변수 1개 입력받는 예제
/////////////////////////////////////////////////////////////////////////////////////////////
// 표준 출력 예제
// int a = 0;
// float b = 1.0, c = 2.0;
// double d = 3.0, e = 0.0; f = 1.0;
// char g = 'b';
// char var[256] = "ABCDEFG";
// long long AB = 12345678901234567L;
// cout << a; // int 변수 1개 출력하는 예제
// cout << b << " " << c; // float 변수 2개 출력하는 예제
// cout << d << " " << e << " " << f; // double 변수 3개 출력하는 예제
// cout << g; // char 변수 1개 출력하는 예제
// cout << var; // 문자열 1개 출력하는 예제
// cout << AB; // long long 변수 1개 출력하는 예제
/////////////////////////////////////////////////////////////////////////////////////////////
#include<iostream>
#include<string>
#include<stack>
#include<vector>
using namespace std;
int N;
string str;
int main(int argc, char** argv)
{
int test_case;
/*
여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
*/
for (test_case = 1; test_case <= 10; ++test_case)
{
cin >> N;
cin >> str;
vector<char> result;
stack<char> temp;
for (int i = 0; i < str.size(); i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
result.push_back(str[i]);
}
else if (str[i] == '*')
{
temp.push(str[i]);
}
else
{
while (!temp.empty() && temp.top() == '*')
{
result.push_back(temp.top());
temp.pop();
}
temp.push(str[i]);
}
}
while (!temp.empty())
{
result.push_back(temp.top());
temp.pop();
}
stack<int> num;
for (int i = 0; i < result.size(); i++)
{
if (result[i] >= '0' && result[i] <= '9')
{
num.push(result[i] - '0');
}
else
{
int num1 = num.top();
num.pop();
int num2 = num.top();
num.pop();
if (result[i] == '+')
{
num.push(num1 + num2);
}
else if (result[i] == '*')
{
num.push(num1 * num2);
}
}
}
cout << "#" << test_case << " " << num.top() << endl;
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
반응형
'Algorithm' 카테고리의 다른 글
1808. 지희의 고장난 계산기 (0) | 2020.04.17 |
---|---|
백준 주사위 윷놀이 재도전 (0) | 2020.04.15 |
1258. [S/W 문제해결 응용] 7일차 - 행렬찾기 (0) | 2020.04.13 |
4014. [모의 SW 역량테스트] 활주로 건설 (0) | 2020.04.12 |
[2020카카오공채] 가사 검색 (0) | 2020.04.10 |