/* depth 개념을 넣어야, 다른 값들이 저장되어 있습니다. */ #include <iostream> using namespace std; int n, numArr[101], oper[4]; long long maxVal = -100000000, minVal = 1000000000; void dfs(int a, int b, int c, int d, int depth, long long sum) { if (depth == n - 1) { if (maxVal < sum) maxVal = sum; if (minVal > sum) minVal = sum; } if (a > 0) { dfs(a - 1, b, c, d, depth + 1, sum + numArr[depth + 1]); } if (b > 0) { dfs(a, b-1, c, d, depth + 1, sum - numArr[depth + 1]); } if (c > 0) { dfs(a, b, c-1, d, depth + 1, sum * numArr[depth + 1]); } if (d > 0) { dfs(a, b, c, d-1, depth + 1, sum / numArr[depth + 1]); } } int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> numArr[i]; } for (int i = 0; i < 4; i++) { cin >> oper[i]; } dfs(oper[0], oper[1], oper[2], oper[3], 0, numArr[0]); cout << maxVal << endl << minVal << endl; return 0; } |
dfs 개념에 대해서 익히도록 하겠습니다. 깊이에 대해서 나오고, 모든 것을 원하는 결과가 나올때는 뎁스가 엔-1 이 될떄입니다. 그리고 이프문을 넣어서 완전탐색이 되게 만들고, 모든 넘어레이가 0이 되면, 다른 것을 탐색합니다. 오케이. 그리고 이렇게 순차적으로 넣어두면 2 1 1 1 일 때, 다른때일때, 이렇게 자동적으로 넘어가는 것을 인식하면 됩니다. 그리고 넘어갈때마다, 뎁스를 사용하면 좋은 점은 그 함수에서 다른 것들을 섬이라던지 뎁스를 그대로 기억하고 다른 변수들도 그대로 기억하고 있다는 점입니다. |