[백준] 잃어버린 괄호 1541 c++
2022. 7. 6. 23:09ㆍ알고리즘/백준
728x90
1. 95%에서 멈추는 현상 (1개를 넣었을 때 예외 처리해야 됨)
1. 숫자랑 기호를 구별한다.
2. 만약에 +가 있다면 앞뒤로 더해서 새로운 배열에 넣는다.
3. 마지막 기호가 -,+에 따라서 마지막 배열에 더 해줄지, 추가할지 정한다.
4. 배열에 있는 수들은 이제 계속 빼 주면 된다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector <long long int> vec;
vector <char> pm;
vector <long long int> k;
string str, tmp;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> str;
long long int point = 0;
for (long long int i = 0; i < str.size(); i++) {
if (str[i] == '+' || str[i] == '-') {
long long int q = stoi(tmp);
vec.push_back(q);
pm.push_back(str[i]);
tmp = "";
}
else {
tmp += str[i];
}
}
long long int q = stoi(tmp);
vec.push_back(q);
if (pm.size() == 0) {
cout << vec[0];
return 0;
}
//숫자 문자 구분 완료
for (long long int i = 0; i < pm.size(); i++) {
if (pm[i] == '+') {
long long int sum = vec[i];
while (true) { //+한개이상일때 처리
if (i == pm.size() ||pm[i] == '-') {
k.push_back(sum);
break;
}
sum += vec[i+1];
i++;
}
}
else {
k.push_back(vec[i]);
}
}//+= 처리해서 k에 넣기
if(pm[pm.size()-1]=='-'){
k.push_back(vec[vec.size() - 1]);
}
if (k.size() == 1) {
cout << k[0];
return 0;
}
long long int result = k[0];
for (long long int i = 1; i < k.size(); i++) {
result -= k[i];
}
cout << result;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1927 최소 힙 c++ (0) | 2022.07.08 |
---|---|
[백준] 1780 종이의 개수 (c++) (0) | 2022.07.07 |
[백준] 11444 피보나치 수 6 (0) | 2022.07.05 |
[백준] 11727 2×n 타일링 2 c++ (0) | 2022.07.04 |
[백준] 11726 2×n 타일링 c++ (0) | 2022.07.04 |