[문제]
https://www.acmicpc.net/problem/14888
[풀이]
백트래킹 문제.
N개의 연산자 수를 모두 채우면 재귀를 종료하고 그 결과값을 비교하여 최댓값, 최솟값을 갱신해준다.
[코드]
#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <queue>
#include <cstring>
using namespace std;
int N;
int operands[11];
int operators[4];
int maxx=-987654321, minn=987654321;
void calculate(int ans, int idx){
if (idx==N){
if (ans > maxx)
maxx = ans;
if (ans < minn)
minn = ans;
return;
}
for(int i=0; i<4; i++) {
if (operators[i] <= 0) continue;
operators[i]--;
if (i == 0) {
calculate(ans + operands[idx], idx + 1);
} else if (i == 1) {
calculate(ans - operands[idx], idx + 1);
} else if (i == 2) {
calculate(ans * operands[idx], idx + 1);
} else {
calculate(ans / operands[idx], idx + 1);
}
operators[i]++;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> N;
for(int i=0; i<N; i++){
cin >> operands[i];
}
for(int i=0; i<4; i++){
cin >> operators[i]; //덧셈, 뺄셈, 곱셈, 나눗셈
}
calculate(operands[0], 1);
cout << maxx << "\n" << minn;
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[boj] 백준 5430 AC (c++) - deque (0) | 2022.09.07 |
---|---|
[boj] 백준 11403 경로 찾기 (c++) - 플로이드 워셜 (0) | 2022.09.06 |
[boj] 백준 11052 카드 구매하기 (c++) - dp (0) | 2022.08.30 |
[boj] 백준 2179 미로탐색 (c++) - BFS (0) | 2022.08.29 |
[boj] 백준 1105 팔 (c++) (0) | 2022.06.29 |