간단히 풀렸던 문제!
연산자들을 oper배열에 넣고,
피연산자들을 arr배열에 넣는다.
MAX 와 MIN을 조건에 맞게 설정해주고
for문을 돌리면서 하나씩 계산해주고, 계산된 결과(sum)를 이용해 적절히 MAX와 MIN을 넣어주면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#include <iostream>
using namespace std;
int arr[11];
int oper[4];
int N, sum;
int MAX = -100000001, MIN = 1000000001;
void func(int sum, int cur) {
if (cur == N) {
if (sum > MAX) MAX = sum;
if (sum < MIN) MIN = sum;
return;
}
for (int i = 0; i < 4; i++) {
if (oper[i] > 0) {
oper[i]--;
if (i == 0)
func(sum + arr[cur], cur + 1);
else if (i == 1)
func(sum - arr[cur], cur + 1);
else if (i == 2)
func(sum * arr[cur], cur + 1);
else if (i == 3)
func(sum / arr[cur], cur + 1);
oper[i]++;
}
}
}
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> N;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
for (int i = 0; i < 4; i++) {
cin >> oper[i];
}
func(arr[0], 1);
cout << MAX << '\n' << MIN;
return 0;
}
|
cs |