알고리즘/코테 문제
[BOJ/백준 1541][C++] 잃어버린 괄호
gyong
2022. 4. 23. 03:37
반응형
문제
https://www.acmicpc.net/problem/1541
문제 내용
입력받은 식에 괄호를 적절히 쳐서, 식의 값을 최소로 만들면 된다.
식에는 0~9까지의 숫자, +, - 만이 올 수 있고, 시작과 끝은 반드시 숫자이다.
문제 풀이
식의 값을 최소로 만드는 것이 핵심이다.
그렇기 때문에 - 가 입력되면 그 뒤를 모두 뺄셈 처리하면 된다.
ex-1) 55 - 50 + 45 => 55 - ( 50 + 45 ) = - 40
ex-2) 55 - 50 + 45 - 30 + 20 => 55 - ( 50 + 45 ) - ( 30 + 20 ) = -90
ex-2에서 알 수 있다시피, 처음으로 나오는 - 뒤의 숫자를 전부 빼주면 된다.
코드
#include <iostream>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
//입력
string str;
getline(cin, str);
//문제 해결
int result = 0;
string tmp = "";
bool minus = false;
for (int i = 0; i <= str.length(); i++) {
if (str[i] == '+' || str[i] == '-' || i == str.length()) { //부호를 입력 받았을 때
if (minus) {//음수일때
result -= stoi(tmp);
tmp = ""; //임시 문자열 초기화
}
else {
result += stoi(tmp);
tmp = ""; //임시 문자열 초기화
}
}
else {
tmp += str[i];
}
//부호가 마이너스일때.
if (str[i] == '-') {
minus = true;
}
}
//결과 해결
cout << result << '\n';
}
반응형