[백준/C++] 1541번 잃어버린 괄호
2021. 2. 22. 21:10ㆍ알고리즘/구현
728x90
반응형
문제: www.acmicpc.net/problem/1541
문제풀이
문제의 분류는 그리디 알고리즘이지만
문자열 처리만으로 풀 수 있는 문제였다.
식의 '-' 연산을 만나기 전까지의 수는 계속 더해주고 '-' 연산을 만난 후 부터는 '+' 연산을 만나든 '-' 연산을 만나든 관계없이 빼주면된다.
예를 들어
10+10+10-10+10+10 은 10+10+10-(10+10+10) 즉, 10+10+10-10-10-10 이 된다.
코드
#include <iostream>
using namespace std;
int main(){
ios::sync_with_stdio(false); cin.tie(nullptr);
string str;
cin>>str;
string temp; //수 저장
int result = 0; //결과값
bool minus = false; // - 연산을 만났는지 여부
for(int i=0; i<str.size(); i++){
if((str[i] == '+'||str[i] == '-')&&!minus){ // '-' 연산을 만난 직후의 수까지 모두 더한다.
result += stoi(temp);
temp.clear();
}
else if((str[i] == '+'||str[i] == '-')&&minus){ //'-' 연산을 만난 후에는 모두 뺀다.
result -= stoi(temp);
temp.clear();
}
else
temp += str[i];
if(str[i] == '-') //'-' 연산을 만나면 true
minus = true;
}
if(minus) //for문이 끝나고 마지막의 수를 더하거나 빼준다.
result -= stoi(temp);
else
result += stoi(temp);
cout<<result;
return 0;
}
결과
728x90
반응형
'알고리즘 > 구현' 카테고리의 다른 글
[백준/C++] 5525번 IOIOI (0) | 2021.02.25 |
---|---|
[백준/C++] 1780번 종이의 개수 (0) | 2021.02.23 |
[백준/C++] 1260번 DFS와 BFS (0) | 2021.02.21 |
[백준/C++] 9375번 패션왕 신해빈 (0) | 2021.02.16 |
[백준/C++] 11723번 집합 (0) | 2021.02.04 |