HyeLog

๋ฐฑ์ค€_14888_์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ (๋ธŒ๋ฃจํŠธํฌ์Šค-์žฌ๊ท€) ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€_14888_์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ (๋ธŒ๋ฃจํŠธํฌ์Šค-์žฌ๊ท€)

shj718 2022. 4. 18. 16:24

๐Ÿ“Œ ๋ฌธ์ œ: https://www.acmicpc.net/problem/14888

 

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

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

www.acmicpc.net

 

๐Ÿ“Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜: ๋ธŒ๋ฃจํŠธํฌ์Šค-์žฌ๊ท€

 

๐Ÿ“Œ idea: ์ˆซ์ž ์‚ฌ์ด์˜ ๊ฐ ์ž๋ฆฌ์— ๋Œ€ํ•ด ์ตœ๋Œ€ 4๊ฐ€์ง€ ๊ฒฝ์šฐ(+,-,*,/)๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ. (๋‹จ, ์—ฐ์‚ฐ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•  ๊ฒƒ!)

 

๐Ÿ“Œ ์ถ”๊ฐ€๋กœ ์ •๋ฆฌํ•œ ๋‚ด์šฉ:

- make_pair() ํ•จ์ˆ˜๋Š” utility ํ—ค๋”์— ์ •์˜๋˜์–ด์žˆ์œผ๋‚˜ utility ํ—ค๋”๋Š” <vector>๋‚˜ <algorithm>์— ํฌํ•จ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ๋”ฐ๋กœ <utility>๋ฅผ includeํ•  ํ•„์š”๋Š” ์—†๋‹ค.

- for(auto element : array) ์‚ฌ์šฉ๋ฒ•

 

๐Ÿ’ป ์ฝ”๋“œ:

#include <iostream>
#include <vector>

using namespace std;

int N;
vector<int> arr;

pair<int, int> solve(int index, int result, int plus, int minus, int multi, int divide) {
	// ์ •๋‹ต ๋งŒ๋“  ๊ฒฝ์šฐ
	if (index == N) {
		return make_pair(result, result);
	}
	// ๋‹ค์Œ ํ˜ธ์ถœ: ๊ฐ ์ž๋ฆฌ์˜ ์—ฐ์‚ฐ์ž๊ฐ€ +, -, *, / ์ธ ๊ฒฝ์šฐ ๊ฐ 4๊ฐ€์ง€์— ๋Œ€ํ•ด ํ˜ธ์ถœ
	// ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ฒกํ„ฐ ์ƒ์„ฑ
	vector<pair<int, int>> res;
	if (plus > 0)
		res.push_back(solve(index + 1, result + arr[index], plus - 1, minus, multi, divide));
	if (minus > 0)
		res.push_back(solve(index + 1, result - arr[index], plus, minus - 1, multi, divide));
	if (multi > 0)
		res.push_back(solve(index + 1, result * arr[index], plus, minus, multi - 1, divide));
	if (divide > 0)
		res.push_back(solve(index + 1, result / arr[index], plus, minus, multi, divide - 1));
	// ์ตœ๋Œ€๊ฐ’, ์ตœ์†Œ๊ฐ’ ์ฐพ๊ธฐ
	pair<int, int> ans = res[0]; // ans: ์ตœ๋Œ€๊ฐ’, ์ตœ์†Ÿ๊ฐ’์˜ pair
	for (auto i : res) {
		if (ans.first < i.first) ans.first = i.first;
		if (ans.second > i.second) ans.second = i.second;
	}
	return ans;
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> N;
	int x;
	for (int i = 0; i < N; i++) {
		cin >> x;
		arr.push_back(x);
	}
	int plus, minus, multi, divide;
	cin >> plus >> minus >> multi >> divide;
	auto answer = solve(1, arr[0], plus, minus, multi, divide);
	cout << answer.first << '\n' << answer.second << '\n';
	return 0;
}