728x90
https://www.acmicpc.net/problem/1541
문제 풀이
식이 주어졌을 때 최솟값을 만드는 문제이다.
단순하게 -가 등장하면 괄호를 열거나 닫아서 식을 최소로 만들 수 있다.
따로 괄호가 들어간 식을 보일 필요가 없으므로 -가 등장한 순간부터 이후의 모든 숫자들을 빼면 최솟값이 만들어진다!
변수
string str : 입력받은 식을 저장
string num : str에서 숫자 부분만 저장
int ans : 계산되는 값을 저장
bool isMinus : '-' 가 있었는지 체크하기 위한 변수
함수 solution
정답을 위한 함수로 str을 순회하면서 연산을 할지 말지 따진다.
연산을 하지 않는다면 num 뒤에 str[i]를 붙여준다.
연산은 연산자일 때와 string의 끝에 도달했을 때 이 두 가지 경우에 실시한다. num에 저장된 숫자들을 stoi 함수로 변환시킨 후 ans에 값을 더하거나 빼서 저장한다. 이후 num을 초기화해준다.
이때, isMinus가 true라면 앞에 -가 한 번이라도 등장했다는 뜻이므로 빼기만 하면 된다.
느낀 점
이번 문제로 확실하게 string에 대한 이해도가 부족하다는 것을 느꼈다. string에 대한 공부가 확실히 필요하다!
코드
#include <iostream>
#include <string>
using namespace std;
string str;
int ans;
bool isMinus = false;
void solution() {
string num;
for (int i = 0; i <= str.length();i++) {
if (str[i] == '-' || str[i] == '+' || str[i] == NULL) {
if (isMinus)
ans -= stoi(num);
else
ans += stoi(num);
if (str[i] == '-')
isMinus = true;
num = "";
}
else num += str[i];
}
}
int main() {
cin >> str;
solution();
cout << ans;
}
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[C++] 백준 2981번 : 검문 (0) | 2021.07.03 |
---|---|
[C++] 백준 13305번 : 주유소 (0) | 2021.07.01 |
[C++] 백준 11399번 : ATM (0) | 2021.06.28 |
[C++] 백준 1931번 : 회의실 배정 (0) | 2021.06.27 |
[C++] 백준 11047번 : 동전 0 (0) | 2021.06.26 |
댓글