[ ALGORITHM ]/[ 백 준 ]

[BAEKJOON] 14888번 연산자 끼워넣기

HiStar__ 2020. 6. 19. 23:02

문 제

 

소 스  코 드

#include <iostream>

constexpr int ADD			{ 0 };
constexpr int MINUS			{ 1 };
constexpr int MULTIPLY			{ 2 };
constexpr int DIVISION			{ 3 };

constexpr int MAX_NUMBER		{ 1'000'000'000 };
constexpr int MIN_NUMBER		{ -1'000'000'000 };

int min_number				{ MAX_NUMBER };
int max_number				{ MIN_NUMBER };


int temp_number;

void Func(const int&, const int&, int *, int* );
int Operator(const int& , int& , const int& );

int main() {
	int input;
	std::cin >> input;

	if (!(2 <= input && input <= 11)) return 0;
	
	int * number{ new int[input] };
	int ammd[4];

	for (int i = 0; i < input; ++i)			std::cin >> number[i];	// number input
	for (int i = 0; i < 4; ++i)			std::cin >> ammd[i];		// Operaotr input

	Func(0, input, number, ammd);


	std::cout << max_number << '\n' << min_number;

	delete[] number;
	return 0;
}

int Operator(const int& type , int& first , const int& second) {
	switch (type)
	{
	case ADD:
		return (first + second);
		break;

	case MINUS:
		return (first - second);
		break;

	case MULTIPLY:
		return (first * second);
		break;

	case DIVISION:
		return (first / second);
		break;

	default: 
		std::cout << " Error Type \n";
		break;
	}
}

void Func(const int& count, const int& N, int * number, int* ammd) {
	if (count == N - 1) {
		if (max_number < temp_number)
			if (max_number > MAX_NUMBER) max_number = MAX_NUMBER;
			else max_number = temp_number;
		if (min_number > temp_number)
			if (min_number < MIN_NUMBER) min_number = MIN_NUMBER;
			else min_number = temp_number;

		return;
	}

	if (0 == count) {
		temp_number = number[0];
	}

	int temp{ temp_number };

	for (int i = 0; i < 4; ++i) {
		if (ammd[i] <= 0) continue;
		--(ammd[i]);

		temp_number = Operator(i, temp, number[count + 1]);
		Func(count + 1, N, number, ammd);

		++(ammd[i]);
		temp_number = temp;
		

	}


}

 

풀 이

 

  • 기존 백트래킹 재귀 호출과 비슷하게 더하기, 빼기, 곱하기, 나누기 4개를 Func함수 내에 For문으로
    돌면서 반복한다.

 

결 과 값

 

 

문 제  출 처

문제 링크 : [ BAEKJOON ] https://www.acmicpc.net/problem/14888