#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(void)
{
string s;
cin >> s;
vector<int> plus; // 더하기 될 숫자들의 모음
vector<int> minus; // 빼기 될 숫자들의 모음
int temp = 0, target = s.size(); // target 은 처음으로 마이너스가 나오는 자리
for(int i = 0 ; i < s.size() ; i++)
{
if(s[i] == '-')
{
target = i; // target 위치를 구해놓고
break;
}
}
for(int i = 0 ; i < target ; i++) // 처음으로 - 가 나오기 전까지는 다 plus 에 넣어준다
{ // 플러스와 마이너스 사이에 인덱스 조절 신경써줘야 한다
if(s[i] == '+' || s[i] == '-')
{
plus.push_back(temp);
temp = 0;
}
else
{
temp = temp * 10 + int(s[i] - '0');
}
}
plus.push_back(temp);
temp = 0;
for(int i = target + 1 ; i < s.size() ; i++) // 그 이후의 숫자들부터는 minus 에 넣음
{
if(s[i] == '+' || s[i] == '-')
{
minus.push_back(temp);
temp = 0;
}
else
{
temp = temp * 10 + int(s[i] - '0');
}
}
if(target != s.size()) minus.push_back(temp); // 만약 - 가 하나도 나오지 않았을 경우는 플러스들만 더해줌
int ans = 0;
for(int i = 0 ; i < plus.size() ; i++)
{
ans += plus[i]; // 플러스 친구들은 더해주고
}
for(int i = 0 ; i < minus.size() ; i++) // 마이너스 친구들은 빼주면 답이 나옴!
{
ans -= minus[i];
}
cout << ans << '\n';
}
[Approach]
1. 첫번째 수를 제외하고 나머지 수들은 괄호를 사용하면 전부 (-) 처리 할 수 있다.
2. 첫 번째 마이너스가 나오기 전까지의 수들은 반드시 플러스여야 한다는 걸 생각지 못했다
3. 마이너스가 아예 나오지 않을 경우에 대한 예외처리도 필요할 듯
[Point]
1. 디테일 부분들을 챙겨줘야 했는데 그러지 못했고, 코드 역시 예외처리해주느라 상당히 많이 지저분해진 것 같다.
2. scanf 로 %d%c 와 같이 받으면(혹은 %d 로 부호까지 한번에) 굳이 문자열로 받아서 잘라줄 필요가 없었다.
3. cin 도 형식을 지정해놓고 입력시키면 공백이 없더라도 그에 맞춰서 받아오는 것 같다.
[More]
1. cin / cin.get() / cin.getline()
'PS > BOJ' 카테고리의 다른 글
[백준] 5430.cpp : AC (0) | 2020.07.03 |
---|---|
[백준] 1780.cpp : 종이의 개수 (0) | 2020.07.03 |
[백준] 1260.cpp : DFS 와 BFS (0) | 2020.07.02 |
[백준] 1012.cpp : 유기농 배추 (0) | 2020.07.02 |
[백준] 11399.cpp : ATM (0) | 2020.07.02 |