수열에 연산자를 끼워넣는 문제 수열을 순열로 변화시키면 초깃값인 변화되는 문제가 생기므로 연산자를 각자 0 1 2 3으로 인코딩해주고 이를 디코딩하는 방식으로 한다. 연산자를 순열을 돌린다.


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
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
 
 
int main()
{
    int input;
    cin >> input;
    vector<int> num;
    for (int i = 0; i < input; ++i)
    {
        int x;
        cin >> x;
        num.push_back(x);
    }
    vector<int> cal;
    for (int i = 0; i < 4++i)
    {
        int x;
        cin >> x;
        for (int j = 0;j < x; ++j)
            cal.push_back(i);
    }
    int min_val = 1000000050;
    int max_val = -1000000050;
    
    do
    {
        int init_val = num[0];
        for (int i = 0; i < cal.size(); ++i)
        {
            if (cal[i] == 0)
                init_val += num[i + 1];
            if (cal[i] == 1)
                init_val -= num[i + 1];
            if (cal[i] == 2)
                init_val *= num[i + 1];
            if (cal[i] == 3)
                init_val /= num[i + 1];
        }
        min_val = min(init_val, min_val);
        max_val = max(init_val, max_val);
    } while (next_permutation(cal.begin(), cal.end()));
 
    cout << max_val << endl << min_val << endl;
    return 0;
}
cs


'백준 온라인 저지' 카테고리의 다른 글

백준 1182: 부분집합의 합  (0) 2018.07.29
백준 14889: 스타트와 링크  (0) 2018.07.18
백준 6603: 로또  (0) 2018.07.18
백준 10971: 외판원 순회2  (0) 2018.07.17
백준 2529: 부등호  (0) 2018.07.17

+ Recent posts