📃 문제: 백준 1541(잃어버린 괄호)
[문제]
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
🥈 난이도: 실버 2
📖 풀이 사고 과정
👩💻 구현 코드(c++ 사용)
#include <iostream>
#include <vector>
using namespace std;
vector<int> sumResult;
vector<string> split(char target, string str);
int stringToNum(string element);
int addSum(vector<string> minusSplit);
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string formula;
cin >> formula;
int totalSum = addSum(split('-', formula));
cout << totalSum << endl;
return 0;
}
//입력받은 전체 문자열 '-' 기점으로 split하는 함수
vector<string> split(char target, string str) {
vector<string> minusSplit;
string result = "";
for (int i = 0; i < str.length(); i++) {
if (str[i] == target) {
minusSplit.push_back(result);
result = "";
continue;
}
result += str[i];
}
minusSplit.push_back(result);
return minusSplit;
}
//(string)'10' -> (int) 10으로 바꾸는 함수
int stringToNum(string element) {
int number, final = 0;
for (int i = element.length(); i > 0; i--) {
number = element[element.length() - i]-'0';
for (int j = 0; j < i - 1; j++) {
number *= 10;
}
final += number;
}
return final;
}
//'+' 연산으로 묶인 숫자의 합을 return 하는 함수
int addSum(vector<string> minusSplit) {
int total=0;
for (int i = 0; i < minusSplit.size(); i++) {
vector<string> addGroup = split('+', minusSplit[i]);
for (string element : addGroup) {
if (i == 0) {
total += stringToNum(element);
}
else {
total -= stringToNum(element);
}
}
}
return total;
}
'백준' 카테고리의 다른 글
알고리즘 개념정리: Dynamic Programming (0) | 2025.01.16 |
---|---|
Algorithm 개념정리: Greedy Algorithm (0) | 2025.01.15 |
1931: 회의실 배정 (0) | 2024.03.17 |
백준 1744: 수 묶기 (0) | 2024.03.14 |
백준 1715: 카드 정렬하기 (0) | 2024.03.13 |