[ 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