괄호를 사용하여 입력된 식을 최솟값으로 만드는 문제이다.
해결 방법
- 문자열에 -가 한 개라도 있으면 - 뒤의 숫자들은 모두 뺄셈처리를 하면 최솟값이 된다.
예시
'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 |