백준 1541번(그리디)

Seungjae·2021년 1월 28일
0

알고리즘 문제풀이

목록 보기
7/27

백준 1541번(그리디)


c++에서는 문자열로 받은 수식을 수식으로써 계산해주는 방법을 쉽게 찾을 수 없었습니다. 그래서 조금 더 어렵게 해결한 것 같습니다. 일단 메인 아이디어는 string으로 받은 수식을 '-'기준으로 나누고 각 나누어 놓은 요소들을 각각 계산해주는 것입니다. 그리고 그 결과들을 순서대로 벡터에 넣고, 맨 처음 요소만 result에 더해주고, 그 뒤에 값들은 '-'로 구분됬었기 때문에 뺄셈을 진행해줍니다. 이렇게 하면 최솟값을 구할 수 있습니다.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
	string str;
	int start = 0;
	int number = 0;
	vector<string> strArr;
	vector<string> calArr;

	cin >> str;

	for (int i = 0; i < str.size(); i++) {
		if (str[i] == '-') {
			strArr.push_back(str.substr(start, i-start));
			start = i + 1;
		}
	}
	strArr.push_back(str.substr(start, str.size()));

	for (auto& cal : strArr) {
		start = 0;
		calArr.clear();
		for (int i = 0; i < cal.size(); i++) {
			if (cal[i] == '+') {
				calArr.push_back(cal.substr(start, i - start));
				start = i + 1;
			}
		}

		calArr.push_back(cal.substr(start, cal.size()));

		for (auto& num : calArr) {
			int n = atoi(num.c_str());
			number += n;
		}
		cal = to_string(number); // 숫자 -> 문자열
		number = 0;
	}

	int result = 0;
	
	result += atoi(strArr[0].c_str()); // 문자열 -> 숫자
	strArr.erase(strArr.begin());

	for (auto& cal : strArr) {
		result -= atoi(cal.c_str());
	}

	cout << result;

	return 0;
}
profile
코드 품질의 중요성을 아는 개발자 👋🏻

0개의 댓글