본문 바로가기
Programming/Algorithm

백준 기출 연산자 끼워넣기

by OKOK 2018. 2. 6.

/*

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 일 때, 다른때일때, 이렇게 자동적으로 넘어가는 것을 인식하면 됩니다. 그리고 넘어갈때마다, 뎁스를 사용하면 좋은 점은 그 함수에서 다른 것들을 섬이라던지 뎁스를 그대로 기억하고 다른 변수들도 그대로 기억하고 있다는 점입니다.