반응형
문제 링크 : https://www.acmicpc.net/problem/14888
풀이
주석으로 대체
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, maxVal = -2e9, minVal = 2e9;
vector<int> nums;
int opers[4]; //덧셈, 뺄셈, 곱셈, 나눗셈 순서
void DFS(int sum, int idx){
if(idx == n){ //모든 수를 다 거쳤으면 최솟값, 최댓값 갱신
maxVal = max(sum, maxVal);
minVal = min(sum, minVal);
return;
}
for(int i=0; i<4; i++){
if(opers[i] == 0) continue; //사용할 수 있는 연산자가 없다면 건너뛰기
opers[i]--;
if(i == 0){
DFS(sum + nums[idx], idx+1);
}
else if(i == 1){
DFS(sum - nums[idx], idx+1);
}
else if(i == 2){
DFS(sum * nums[idx], idx+1);
}
else if(i == 3 && nums[idx] != 0){
DFS(sum / nums[idx], idx+1);
}
opers[i]++; //다른 DFS 함수에서 사용할 수 있도록 다시 증가시켜줘야함
}
}
int main(){
cin >> n;
for(int i=0; i<n; i++){
int tmp;
cin >> tmp;
nums.push_back(tmp);
} //숫자 입력받음
for(int i=0; i<4; i++){
int tmp;
cin >> tmp;
opers[i] = tmp;
} //각 연산자의 개수 입력받음
DFS(nums[0], 1); //sum에 nums[0]을 더한 상태로 idx 1부터 시작
cout << maxVal << '\n' << minVal;
}
반응형
'Programming Solve > BOJ' 카테고리의 다른 글
BOJ 1874 - 스택 수열 / C++ (0) | 2022.04.08 |
---|---|
BOJ 9663 - N-Queen / C++ (0) | 2022.03.28 |
BOJ 1913 - 달팽이 / C++ (0) | 2022.03.22 |
BOJ 4486 - 녹색 옷 입은 애가 젤다지? / C++ (0) | 2022.03.20 |
BOJ 1238 - 파티 / C++ (0) | 2022.03.20 |