컴굥일지
[BOJ/백준 1541][C++] 잃어버린 괄호 본문
반응형
문제
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';
}
반응형
'알고리즘 > 코테 문제' 카테고리의 다른 글
[BOJ/백준 10872][C++] 팩토리얼 (0) | 2022.04.29 |
---|---|
[BOJ/백준 7568][C++] 덩치 (0) | 2022.04.28 |
[BOJ/백준 10162][C++] 전자레인지 (0) | 2022.04.22 |
[BOJ/백준 5585][C++] 거스름돈 (0) | 2022.04.21 |
[BOJ/백준 2605][C++] 줄 세우기 (0) | 2022.04.17 |
Comments