본문 바로가기
문제 풀이/백준(BOJ)

[C++] 백준 1541번 : 잃어버린 괄호

by 희조당 2021. 7. 1.
728x90

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net


 문제 풀이

식이 주어졌을 때 최솟값을 만드는 문제이다.

단순하게 -가 등장하면 괄호를 열거나 닫아서 식을 최소로 만들 수 있다.

따로 괄호가 들어간 식을 보일 필요가 없으므로 -가 등장한 순간부터 이후의 모든 숫자들을 빼면 최솟값이 만들어진다!

 

 변수

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

댓글