15658번 - 연산자 끼워넣기(2)
기존에 있던 연산자 끼워넣기 문제와 똑같다. 다만 최대값과 최소값을 모두 구해야 한다는 차이점이 있다.
N의 범위가 최대 11이기 때문에, 시간복잡도는 최대 4^11 로 완전탐색으로 충분히 구현할 수 있게 된다.
<정답 코드>
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 51 52 53 54 | #include<iostream> using namespace std; int N; int num[12]; int op[4]; int MAX = -2000000000; int MIN = 2000000000; void go(int k,int sum) { if (k == N) { if (sum > MAX) MAX = sum; if (sum < MIN) MIN = sum; return; } for (int i = 0; i < 4; i++) { if (op[i] != 0) { op[i] -= 1; if (i == 0) go(k + 1, sum + num[k]); else if (i == 1) go(k + 1, sum - num[k]); else if (i == 2) go(k + 1, sum*num[k]); else go(k + 1, sum / num[k]); op[i] += 1; } } } int main() { cin >> N; for (int i = 0; i < N; i++) cin >> num[i]; for (int i = 0; i < 4; i++) cin >> op[i]; go(1,num[0]); cout << MAX << endl << MIN << endl; return 0; } | cs |
반응형