수열에 연산자를 끼워넣는 문제 수열을 순열로 변화시키면 초깃값인 변화되는 문제가 생기므로 연산자를 각자 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 |