[BOJ] 1541번 잃어버린 괄호

HyunDDeung·2022년 7월 11일
0

BOJ

목록 보기
9/12

풀이

괄호를 이용하여 최소값을 구하긴 위해서는 '-' 이후의 기호들은 전부 '-'로 계산해 주면 된다.
예를 들어 55 + 40 - 30 + 20 - 10 이란 식이 있다고 가정해보자.
위 식의 최소값은 55 + 40 - (30 + 20) - 10 = 55 + 40 - 30 - 20 - 10 과 같다.
즉, 제일 처음 나온 '-' 기호인 30 앞의 '-'를 기준으로 뒤의 기호는 모두 '-'로 계산해주면된다.
num변수를 이용하여 string값을 저장하다가 기호가 오게 된다면 num에 저장중이던 변수를 stoi를 이용하여 result에 반영해주었다. 이때, isMinus 즉, 마이너스가 단 한번이라도 나온 상태라면 result에서 빼주고, 그렇지 않다면 더해주었다.

코드

#include <iostream>
#include <string>

using namespace std;

void init() {
	ios::sync_with_stdio(false);
	cin.tie(0);
}

int main() {
	init();

    string input;
    cin >> input;

    int result = 0;
    string num;
    bool isMinus = false;

    for (int i = 0; i <= input.size(); i++) { 
    	// 기호가 오거나 마지막 자리 숫자라면
        if (input[i] == '-' || input[i] == '+' || i == input.size()) {  
       
            if (isMinus) {
                result -= stoi(num);
                num = "";
            }
            else {
                result += stoi(num);
                num = "";
            }
        }
        else {      // 그렇지 않고 그냥 숫자가 온다면
            num += input[i];
        }

        if (input[i] == '-') {
            isMinus = true;
        }
    }
    cout << result;

	return 0;
}

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

profile
감사합니다.

0개의 댓글