본문 바로가기

백준

백준 1541: 잃어버린 괄호

📃 문제: 백준 1541(잃어버린 괄호)

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

[문제]

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

 

 

🥈 난이도: 실버 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;
}

 

'백준' 카테고리의 다른 글

1931: 회의실 배정  (0) 2024.03.17
백준 1744: 수 묶기  (0) 2024.03.14
백준 1715: 카드 정렬하기  (0) 2024.03.13
백준 11047: 동전 0  (0) 2024.02.18
백준 1300: K번째 수  (1) 2024.02.17