코드
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int INF = 1000000004;
int n,a[103],op[5], mx = -INF,mn = INF;
int oper(int a, int b, char c) {
if(c == '*') return a * b;
if(c == '+') return a + b;
if(c == '-') return a - b;
if(c == '/') return a / b;
return 0;
}
// x는 인덱스 ret은 결과값
void go(int x, int ret) {
if(x == n) {
mn = min(mn, ret);
mx = max(mx, ret);
return;
}
for(int i = 0; i < 4; i++) {
if(op[i]) {
op[i]--;
if(i == 0) {
go(x + 1, oper(ret, a[x], '+'));
} else if(i == 1) {
go(x + 1, oper(ret, a[x],'-'));
} else if(i == 2) {
go(x + 1, oper(ret, a[x],'*'));
} else if(i == 3) {
go(x + 1, oper(ret, a[x],'/'));
}
op[i]++;
}
}
return;
}
int main() {
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < 4; i++) cin >> op[i];
go(1, a[0]);
cout << mx << '\n' << mn << '\n';
return 0;
}
연산자가 최대 10개이므로, 4^10, 약 100만 정도 연산으로 해결할 수 있다. 따라서 무식하게 찾는 방법을 사용할 수 있다. 그리고 문제 조건 중에 연산자를 어떻게 끼워넣어도 -10억 이상 10억 이하이므로 int 자료형을 이용할 수 있다.
'백준' 카테고리의 다른 글
[백준] 3079번 입국심사 C++ 코드 (0) | 2024.07.02 |
---|---|
[백준] 17406번 배열 돌리기 4 C++ 코드 (1) | 2024.06.14 |
[백준] 17822번 원판 돌리기 C++ 코드 (1) | 2024.06.03 |
[백준] 1202번 보석 도둑 C++ 코드 (0) | 2024.05.29 |
[백준] 1062번 가르침 C++ 코드 (0) | 2024.05.21 |