본문 바로가기
백준 문제 풀이 & C++ 공부

백준 14888 C++

by daisy0461 2024. 11. 29.

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

 

이 문제는 딱히 어렵게 생각 안하고 dfs로 생각해서 바로 풀었다.

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int n;
ll minResult = 9876543210, maxResult = -9876543210;
vector<int> v;
vector<int> op;

ll OpCal(int a, int b, int index)
{
	if (index == 0) {		//+
		return a + b;
	}
	else if (index == 1) {		//-
		return a - b;
	}
	else if (index == 2) {		//*
		return a * b;
	}
	else {		// /
		return a / b;
	}
}

void cal(int numIndex, ll tempResult)
{
	if (numIndex >= n) {
		maxResult = max(maxResult, tempResult);
		minResult = min(minResult, tempResult);
	}
	
	if (numIndex == 0) {			//최초
		for (int i = 0; i < op.size(); i++) {
			if (op[i] > 0) {
				op[i] -= 1;
				ll temp = OpCal(v[0], v[1], i);
				//cout << "1st tempResult :" << temp << "\n";
				cal(2, temp);
				op[i] += 1;		//개수 원상복구
			}
		}

		return;
	}

	for (int i = 0; i < op.size(); i++) {
		if (op[i] > 0) {
			op[i] -= 1;
			ll temp = OpCal(tempResult, v[numIndex], i);
			//cout << numIndex << "'s tempResult: " << temp << "\n";
			cal(numIndex + 1, temp);
			op[i] += 1;		//개수 원상복구
		}
	}
}



int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n;

	int t;
	for (int i = 0; i < n; i++) {
		cin >> t;
		v.push_back(t);
	}

	for (int i = 0; i < 4; i++) {
		cin >> t;
		op.push_back(t);		//+ -  * / 각각의 개수이다.
	}

	cal(0, 0);

	cout << maxResult << "\n" << minResult;


}

'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글

백준 15685 C++  (0) 2024.12.29
백준 17143 C++  (0) 2024.11.30
백준 1911 C++  (0) 2024.11.22
백준 15662 C++  (0) 2024.11.20
백준 14891 C++  (1) 2024.11.19