Algorithm/C++ - BOJ

BOJ/백준 - 148888 연산자 끼워넣기 C++

ㅇㅇ잉 2021. 2. 6. 23:57

간단히 풀렸던 문제!

 

연산자들을 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