https://www.acmicpc.net/problem/14888
이 문제는 딱히 어렵게 생각 안하고 dfs로 생각해서 바로 풀었다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll minResult = 9876543210, maxResult = -9876543210;
vector<int> v;
vector<int> op;
ll OpCal(int a, int b, int index)
{
if (index == 0) { //+
return a + b;
}
else if (index == 1) { //-
return a - b;
}
else if (index == 2) { //*
return a * b;
}
else { // /
return a / b;
}
}
void cal(int numIndex, ll tempResult)
{
if (numIndex >= n) {
maxResult = max(maxResult, tempResult);
minResult = min(minResult, tempResult);
}
if (numIndex == 0) { //최초
for (int i = 0; i < op.size(); i++) {
if (op[i] > 0) {
op[i] -= 1;
ll temp = OpCal(v[0], v[1], i);
//cout << "1st tempResult :" << temp << "\n";
cal(2, temp);
op[i] += 1; //개수 원상복구
}
}
return;
}
for (int i = 0; i < op.size(); i++) {
if (op[i] > 0) {
op[i] -= 1;
ll temp = OpCal(tempResult, v[numIndex], i);
//cout << numIndex << "'s tempResult: " << temp << "\n";
cal(numIndex + 1, temp);
op[i] += 1; //개수 원상복구
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
int t;
for (int i = 0; i < n; i++) {
cin >> t;
v.push_back(t);
}
for (int i = 0; i < 4; i++) {
cin >> t;
op.push_back(t); //+ - * / 각각의 개수이다.
}
cal(0, 0);
cout << maxResult << "\n" << minResult;
}
'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글
백준 15685 C++ (0) | 2024.12.29 |
---|---|
백준 17143 C++ (0) | 2024.11.30 |
백준 1911 C++ (0) | 2024.11.22 |
백준 15662 C++ (0) | 2024.11.20 |
백준 14891 C++ (1) | 2024.11.19 |