본문 바로가기

알고리즘 문제

14888번 연산자 끼워넣기 백준 BOJ

#include<stdio.h>

#include<algorithm>

using namespace std;

int N, arr[11],i,pl,minu,mul,divi,mn=1000000001,mx=-1000000001,cnt,result;

void calc(int cnt, int result, int pl, int minu, int mul, int divi) {

if (cnt == N) { //연산을 다 했다면, 10억,-10억과 비교해서 최대 최소값 구함

mx=max(mx, result);

mn=min(mn, result);

return;

}

//cnt로 횟수를 세며 계산 결과에 각 연산자로 피연산자를 연산. 사용한 연산자 개수 하나 줄이기

//각 cnt에서 모든 경우를 따짐

if (pl) calc(cnt + 1, result + arr[cnt], pl - 1, minu, mul, divi);

if (minu) calc(cnt + 1, result - arr[cnt], pl, minu-1, mul, divi);

if (mul) calc(cnt + 1, result * arr[cnt], pl , minu, mul-1, divi);

if (divi) calc(cnt + 1, result / arr[cnt], pl , minu, mul, divi-1);

}

int main() {

scanf_s("%d", &N); //수의 개수

for (i = 0; i < N; i++) {

scanf_s("%d", &arr[i]); //수를 배열에 넣음

}

scanf_s("%d %d %d %d",&pl,&minu,&mul,&divi); //+,-,*,/ 연산자의 개수를 받음

calc(1, arr[0], pl, minu, mul, divi); //함수 호출

printf("%d %d\n", mx, mn);

return 0;

}