dfs에 index
값과 계산되고 있는 return
값을 함께 넘겨주도록 했다.
연산자를 잠깐 빼와서 쓰다(dfs 재귀호출)가 도로 갖다놓는 것을 반복한다.
마지막 index 뒤에는 연산자가 붙을 필요가 없기 때문에
return
조건은 index
와 n(사이즈) - 1
이 같을 때이다.
실버1 포비아 이슈로 잠시 미뤄뒀던 문젠데 막상 풀어보니 별 거 없었다.
나 이제 dfs 아나보다
#include <iostream>
#include <climits>
#include <algorithm>
using namespace std;
int n;
int arr[11], ops[4];
int maxi = INT_MIN;
int mini = INT_MAX;
bool flag;
void dfs(int idx, int ret) {
if (idx == n - 1) {
maxi = max(maxi, ret);
mini = min(mini, ret);
return;
}
for (int i = 0; i < 4; i++) {
if (ops[i] == 0) continue;
ops[i] -= 1;
if (i == 0) dfs(idx + 1, ret + arr[idx + 1]);
else if (i == 1) dfs(idx + 1, ret - arr[idx + 1]);
else if (i == 2) dfs(idx + 1, ret * arr[idx + 1]);
else dfs(idx + 1, ret / arr[idx + 1]);
ops[i] += 1;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++) cin >> arr[i];
for (int i = 0; i < 4; i++) cin >> ops[i];
dfs(0, arr[0]);
cout << maxi << "\n" << mini;
return 0;
}
벌써 일주일이 지나긴 했지만 새해를 맞아 멋진 이모지들을 달아줬다.
실버도 기분은 낼 수 있잖아
혼자 찔린 것이 맞다