알고리즘/Greedy

백준[1541] 잃어버린 괄호

HJ39 2023. 1. 5. 19:17

괄호를 사용하여 입력된 식을 최솟값으로 만드는 문제이다.

 

해결 방법

  1. 문자열에 -가 한 개라도 있으면 - 뒤의 숫자들은 모두 뺄셈처리를 하면 최솟값이 된다.

 

예시

'5-1+4+3-2+1+3'이라는 식이 입력되었을 때 최솟값으로 만들기 위해서는 괄호를 다음과 같이 지정하면 된다.

'5-(1+4+3)-(2+1+3)'으로 괄호를 사용하면 해당 식의 최솟값이 나온다.

 

 

□ 소스 코드

#include <bits/stdc++.h>
/*
 - 직후에 ( 시작
 첫 번쨰 - 이후에 두번째 - 이전까지 괄호를 모든 식에 적용
 
 -가 한개라도 있는 경우 모두 괄호처리를 통해 빼기 계산이 가능해 진다.
 */

void lost(){
    string input;
    cin>>input;
    
    string shortNum;
    int result = 0;
    bool checkMinus = false;
    for(int i=0; i<input.size()+1;i++){
        
        // - 또는 + 일때 실행되지만 맨 마지막 문자까지도 처리하기 위해 문자열 사이즈 인경우 실행되도록 처리
        if(input[i] == '-' || input[i] == '+'|| i == input.size()){
            
            if(checkMinus){ //  문자열에 -가 한개라도 있는 경우
                result -= stoi(shortNum);
                shortNum = "";
            }
            else{   // 문자열에 -가 없는 경우 실행
                result += stoi(shortNum);
                shortNum = "";
            }
        }
        else{   //두자리수 이상의 숫자를 처리하기 위한 코드
            shortNum += input[i];
        }
        
        if(input[i] == '-') // 문자열내부에 -가 한개 이상 있는 경우 모두 빼기 계산
            checkMinus = true;
    }
    
  
    cout<<result<<endl;
}

'알고리즘 > Greedy' 카테고리의 다른 글

백준[13305] 주유소  (0) 2023.01.05
백준[11399] ATM  (0) 2023.01.05
백준[1931] 회의실 배정  (0) 2023.01.05
백준[11047] 코인0  (0) 2023.01.05
1이 될때 까지  (0) 2023.01.05