위의 문제는 단순히 괄호를 추가하여 가장 작은 값을 만들면 됩니다. 

예제 입력 1

55 - 50 + 40 에서 가장 작은값을 만드는 괄호는

55 - (50 + 40) = -35입니다. => 정답이 -35 로 출력되어 맞죠.

 

 

첫 입력부와 마지막 입력부는 숫자입니다. 

첫입력부 숫자 앞에는 - 부호가 붙지 않으니 무조건 양수입니다. 

 

ex )  A + B - C + D - E - F + G + H - I

A + B - [C + D] - [E] - [F + G + H] - [I]

 

처음 - 부호가 나오고 이후의 숫자들은 +이던 -이던 괄호 처리로 무조건 뺄 수 있습니다.

- 부호 이후부터 나오는 모든 값들을 빼주면, 최대한으로 빼주게 됩니다.

 

 

+와 - 그리고 ()까지 있어서 charater별 check하기위해 string사용하였습니다. 

InputData에서 string으로 식 받아옵니다. 

 

<C++>

#include <iostream>
#include <string>
using namespace std;

//입력받는부분
string input;

void InputData(){

	cin >> input;
}
int main(){

	InputData();

	
	int ans = 0;

	// 숫자 받아올 버퍼입니다.
	string temp;
	//처음 마이너스 부호 구분 flag입니다.
	bool FirstMinusFlag = false;
	
	for(int i = 0; i<= input.size(); i++)
	{
		

		if( input[i] == '-' || input[i] == '+' || input[i] == '\0')
		{

			if(FirstMinusFlag == true)
			{
				//stoi로 string to int 형변형입니다.
				ans -= stoi(temp);

			}
			else
			{
				ans += stoi(temp);
				
			}
			
			// ans에 temp값 처리된 후 다음 숫자를 받아오기 위해 clear합니다.
			temp.clear();
			if(input[i] == '-')
			{
				//처음 minus 부호 시에만 타는 if문입니다.
				FirstMinusFlag = true;
			}
			
			continue;
		}

			//char 한숫자씩 string에 담습니다. stoi로 위에서 형변형을 함으로 10진수 처리 안해줘도 됩니다.
			temp += input[i];
			
			//Debugging Code
			// cout<<"i :"<<i<<"temp :"<<temp<<endl;

	
			//cout<<"i :"<<i<< "ans: "<<ans<<endl;

	}
	cout<<ans<<endl;
	
	return 0;
}

 

<Python>

 

s = str(input())

#int 형
sum = 0

FirstMinusFlag = False

temp = ""

for i in s:

# Python string은 할당된 string이상의 index에 접근하지 못하도록 되어있음
# overflow를 강제로 발생시킬수 없음.
    if(i == '-' or i == '+'):    
        
      
        if(FirstMinusFlag == True):
            sum -= int(temp)
        else :
            sum += (int(temp))
            
        temp = ''
        if(i == '-') :
            FirstMinusFlag = True
        #부호일때 temp에 부호가 추가되지 않도록 continue
        continue
        
    temp += str(i)


#마지막 숫자를 추가해줌
if(FirstMinusFlag == True):
    sum -= int(temp)
else :
    sum += (int(temp))


print(sum)

 

 

 

 

 

 

 

 

 

우선 A, B, C로 각각 다른 조리 시간 버튼의 조합으로 T(요리시간)을 정확하게 맞출 수 있냐?

만약 맞출 수 있다면 A번 누른 횟수, B번 누른 횟수, C번 누른 횟수를 출력하라는 문제입니다. 

 

 

<C++>

// Example program
#include <iostream>
#include <string>

using namespace std;
int main()
{

	//결과값:최소 기능 사용 횟수
	int Acount = 0;
	int Bcount = 0;
	int Ccount = 0;

	// 전자레인지 도구(단위:second)
	int A = 300;
	int B = 60;
	int C = 10;

	//요리시간 T
	int T = 0;

	//불가능 여부 체크 flag
	bool impossibleFlag = false;

	cin >> T;

	while (T != 0)
	{

		if (T >= A)
		{
			//A기능 사용 나눈 몫
			Acount = T / A;
			//A기능 사용 후 나머지
			T = T % A;

		}
		else if (T >= B) {
            
			// B기능 사용 나눈 몫
			Bcount = T / B;
            // B기능 사용 후 나머지
			T = T % B;

		}
		else if (T >= C) {

            // C기능 사용 나눈 몫
			Ccount = T / C;
            // C기능 사용 후 나머지
			T = T % C;
		}
		else
		{

			if (T != 0)

			{
				// A,B,C로 계속 나눴지만 나머지가 남아
				// T 를 나누기 불가능한 경우
				impossibleFlag = true;
				break;
			}
		}
	}

	//T 나누기 불가능 여부 체크 후 
	//각각 결과 값 출력 분기문
	if (impossibleFlag == true)
	{
		cout << -1 << endl;
	}
	else {
		cout << Acount << " " << Bcount << " " << Ccount << endl;

	}
}

 

<Python>

# T 요리시간 단위 초
T = int(input())

# 조리시간 A,B,C도 초 단위로 맞춤
A = 300
B = 60
C = 10


#A,B,C각각의 count를 저장할 변수
A_cnt = 0;
B_cnt = 0;
C_cnt = 0;

#A,B,C로 나누어 떨어지지 않을 경우를 위한 flag
impossible_flag = False

while T != 0:
    
    
    if T >= A:
        A_cnt = int(T/A)
        T = T%A
    
    elif T>= B:
        B_cnt = int(T/B)
        T = T%B
    elif T>= C:
        C_cnt = int(T/C)
        T = T%C
    else:
        if T!= 0:
            impossible_flag = True
            break
        
if impossible_flag == True:
    print(-1)
else:
    print(A_cnt, B_cnt, C_cnt)

 

+ Recent posts