[문제 링크]
https://www.acmicpc.net/problem/14888
간단한 백트래킹 문제였다.
기저사례는 시작 인덱스가 수열의 끝에 도달하는 경우로 설정하였고,
기저사례에 도달할 경우 현재까지 계산된 값으로 최소값과 최대값을 갱신하도록 구현하였다.
#include <iostream>
#include <vector>
using namespace std;
int minVal = 1987654321;
int maxVal = -1987654321;
enum class Operator
{
Plus,
Minus,
Multiple,
Division
};
void backtracking(vector<int>& arr, vector<int>& operatorArr, int start, int value)
{
if (start == arr.size())
{
minVal = min(minVal, value);
maxVal = max(maxVal, value);
return;
}
for (int i = 0; i < 4; i++)
{
if (operatorArr[i] == 0) continue;
int nextValue = value;
switch (i)
{
case (int)Operator::Plus:
nextValue += arr[start];
break;
case (int)Operator::Minus:
nextValue -= arr[start];
break;
case (int)Operator::Multiple:
nextValue *= arr[start];
break;
case (int)Operator::Division:
nextValue /= arr[start];
break;
}
operatorArr[i]--;
backtracking(arr, operatorArr, start + 1, nextValue);
operatorArr[i]++;
}
}
int main(void)
{
int N;
cin >> N;
vector<int> arr(N);
for (int i = 0; i < N; i++)
{
cin >> arr[i];
}
vector<int> operatorArr(4, 0);
cin >> operatorArr[0] >> operatorArr[1] >> operatorArr[2] >> operatorArr[3];
backtracking(arr, operatorArr, 1, arr[0]);
cout << maxVal << '\n' << minVal;
return 0;
}

'알고리즘 > BOJ' 카테고리의 다른 글
| 백준 15649번: N과 M (1) (0) | 2026.02.23 |
|---|---|
| 백준 1068번 : 트리 (0) | 2025.12.31 |
| 백준 1013번: Contact (0) | 2025.12.22 |
| 백준 17404번: RGP 거리 2 (0) | 2025.09.18 |
| 백준 9655번: 돌 게임 (0) | 2025.09.16 |






