#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;
}
'알고리즘 문제' 카테고리의 다른 글
프로그래머스 문자열 내림차순으로 배치하기 (0) | 2018.09.29 |
---|---|
프로그래머스 완주하지 못한 선수 (0) | 2018.09.29 |
백준 2589번 보물섬 (0) | 2018.04.12 |
Programmers Level 8 올바른 괄호 (카탈린 수 사용) (0) | 2018.01.28 |
Programmers Level 8 선입선출 스케줄링 (1) | 2018.01.28 |