<C/C++> BOJ 14888: ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ

https://www.acmicpc.net/problem/14888

 

14888๋ฒˆ: ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(2 ≤ N ≤ 11)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ai ≤ 100) ์…‹์งธ ์ค„์—๋Š” ํ•ฉ์ด N-1์ธ 4๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฐจ๋ก€๋Œ€๋กœ ๋ง์…ˆ(+)์˜ ๊ฐœ์ˆ˜, ๋บ„์…ˆ(-)์˜ ๊ฐœ์ˆ˜, 

www.acmicpc.net

 

๋ฌด๋‚œํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” DFS ์ˆœ์—ด ๋ฌธ์ œ์˜€๋‹ค. ๋‹ค๋งŒ ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š์•„ ์ฒ˜์Œ์— max_num์„ 0์œผ๋กœ ์žก์•„์ค˜์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
#define MAXN 100
#define INF ((int)1e9)
int N;
int R, C, D;
int A[MAXN+10];
int op[4]; // +, -, *, /
int min_num = INF, max_num = -INF;

void InputData(void) {
	cin >> N;
	for(int i = 0; i < N; i++) {
		cin >> A[i];
	}
	for(int i = 0; i < 4; i++) {
		cin >> op[i];
	}
}

int Cal (int res, int idx, int op) { // ๊ฒฐ๊ณผ, ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ, ์—ฐ์‚ฐ์ž
	switch(op) {
		case 0: 
			return res + idx;
		case 1:
			return res - idx;
		case 2:
			return res * idx;
		case 3:
			return res / idx;
	}
	return -1;
}
void Solve(int cnt, int res) { //ํšŸ์ˆ˜
	int temp;
	//cout << cnt << "," << res << endl;
	if(cnt >= N) {
		if (res > max_num) max_num = res;
		if (res < min_num) min_num = res;
	}
	for(int i = 0; i < 4; i++) {
		if(op[i] == 0) continue;
		op[i]--;
		temp = res;
		res = Cal(res, A[cnt], i);
		//cout << temp << ", " << res << ", " << cnt <<endl;
		Solve(cnt+1, res);
		op[i]++;
		res = temp;
	}
}

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	InputData();
	Solve(1, A[0]);
	cout<<max_num<<endl;
	cout<<min_num<<endl;
	return 0;
}