1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
필자는 입력받은 식을 역순으로 탐색해서 풀었다.
숫자를 만나면 수를 누적하고 자릿수를 올려주다가, '+'를 만나면 자릿수를 다시 1의 자리로 바꿔준다.
그렇게 계속 누적하다가 '-'를 만나면 결과값에다 누적한 수를 빼고 0으로 초기화한다. 그리고 자릿수를 1의 자리로 바꿔준다.
문제에서 식의 처음과 끝은 반드시 숫자라고 명시했으므로 처음 나오는 수는 반드시 양수일 것이기 때문에 결과값에 처음 나온 수를 더한 값을 출력하면 원하는 결과를 얻을 수 있다.
#include <iostream>
#include <string>
using namespace std;
int Greedy(string& exp)
{
int len = exp.length();
int ret = 0, sum = 0, digit = 1;
for (int i = len-1; i >=0; i--)
{
if (exp[i] == '+')
digit = 1;
else if (exp[i] == '-')
{
ret -= sum;
digit = 1;
sum = 0;
}
else
{
sum += (exp[i]-'0') * digit;
digit *= 10;
}
}
return ret + sum;
}
int main(void)
{
string exp;
cin >> exp;
cout << Greedy(exp) << endl;
return 0;
}
알고리즘 200일 프로젝트 - 111 day
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1120번: 문자열 (0) | 2020.07.27 |
---|---|
백준 2875번: 대회 or 인턴 (0) | 2020.07.27 |
백준 10610번: 30 (0) | 2020.07.26 |
백준 2217번: 로프 (0) | 2020.07.26 |
백준 5585번: 거스름돈 (0) | 2020.07.26 |