본문 바로가기

알고리즘/삼성sw역량테스트 기출

삼성 SW 역량테스트 기출 :: 연산자 끼워넣기

반응형

문제링크 : https://www.acmicpc.net/problem/14888

난이도 : 하

 

/*
* 연산자 끼워넣기 : https://www.acmicpc.net/problem/14888
*/

#include <stdio.h>
#include <iostream>

#define FOR(i, n) for(int i = 0 ; i < n; i ++)
using namespace std;
int n, nums[11], op[4], mmax, mmin;
void init(){
cin >> n;
FOR(i, n) cin >> nums[i];
FOR(i, 4) cin >> op[i];
mmax = INT32_MIN;
mmin = INT32_MAX;
}
int operate(int a, int b, int op){
switch(op){
case 0: return a+b;
case 1: return a-b;
case 2: return a*b;
case 3: return a/b;
}
}
/**
* 연산자가 leftOps개 남았고, 이전까지의 값이 prev일 때 나머지 연산을 모두 해보는 함수
*/
void operate(int leftOps, int prev){
if(leftOps == 0){
// cout << prev << endl;
mmax = max(prev, mmax);
mmin = min(prev, mmin);
return;
}
FOR(i, 4) {
if (op[i] != 0) {
op[i]--;
operate(leftOps - 1, operate(prev, nums[n - leftOps], i));
op[i]++;
}
}
}
int main(){
init();
operate(n-1, nums[0]);
cout << mmax << endl << mmin << endl;

}
반응형