본문 바로가기

Algorithm

1223. [S/W 문제해결 기본] 6일차 - 계산기2

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14nnAaAFACFAYD&categoryId=AV14nnAaAFACFAYD&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

같은 유형 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을 리턴해야합니다.
}
반응형