https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱
www.acmicpc.net
브루트포스를 연습하고 있는데 해당 문제는 DFS로 풀어진걸 참고했다.. 이런 유형은 그냥 DFS가 편한 것 같다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <stack>
#include <string>
#include <queue>
#include <cmath>
using namespace std;
#define MAX 11
int n;
int arr[MAX];
int maxCount = INT_MIN;
int minCount = INT_MAX;
void getCalculate(int index, int number, int add, int sub, int mul, int div)
{
if (index == n)
{
maxCount = max(maxCount, number);
minCount = min(minCount, number);
}
else
{
if (add > 0) getCalculate(index + 1, number + arr[index], add - 1, sub, mul, div);
if (sub > 0) getCalculate(index + 1, number - arr[index], add , sub-1, mul, div);
if (mul > 0) getCalculate(index + 1, number * arr[index], add , sub, mul-1, div);
if (div > 0) getCalculate(index + 1, number / arr[index], add , sub, mul, div-1);
}
}
int main() {
int plus, minus, div, mul;
cin >> n;
for (int i = 0; i < n; i++)
{
int num;
cin >> num;
arr[i] = num;
}
cin >> plus >> minus >> mul >> div;
getCalculate(1, arr[0], plus, minus, mul, div);
cout << maxCount << endl;
cout << minCount << endl;
return 0;
}
'알고리즘 풀이' 카테고리의 다른 글
2961. 도영이가 만든 맛있는 음식 (0) | 2024.01.18 |
---|---|
1476. 날짜 계산 (0) | 2024.01.14 |
1436. 영화감독 숌 (0) | 2024.01.02 |
1018번 체스판 다시 칠하기 (0) | 2023.12.31 |
1743. 음식물 피하기 (0) | 2023.12.25 |