[백준 14888] 연산자 끼워넣기

rhkr9080·2022년 11월 8일
0

BOJ(백준)

목록 보기
3/19

문제링크 : https://www.acmicpc.net/workbook/view/1152

💻 문제 풀이 : C++

#include <iostream>
#include <vector>

using namespace std;

vector<int> numbers;
int chosen[12];
int oper[4];
int maxAns = -2134567890;
int minAns = 2134567890;

int getNum(int size)
{
	int result = numbers[0];
	for (int i = 1; i < size; i++)
	{
		if (chosen[i-1] == 0)
			result += numbers[i];
		else if (chosen[i-1] == 1)
			result -= numbers[i];
		else if (chosen[i-1] == 2)
			result *= numbers[i];
		else if (chosen[i-1] == 3)
			result /= numbers[i];
	}
	return result;
}


void DFS(int level, int depth)
{
	if (level == depth)
	{
		int now = getNum(depth + 1);
		if (now > maxAns) maxAns = now;
		if (now < minAns) minAns = now;
	}

	for (int i = 0; i < 4; i++)
	{
		if (oper[i] == 0) continue;
		oper[i]--;
		chosen[level] = i;
		DFS(level + 1, depth);
		oper[i]++;
		//oper[i]++;
	}
}

int main()
{
	int N;
	cin >> N;
	for (int i = 0; i < N; i++)
	{
		int num;
		cin >> num;
		numbers.push_back(num);
	}
	for (int i = 0; i < 4; i++)
		cin >> oper[i];
	
	DFS(0, N-1);
	cout << maxAns << endl << minAns;

	return 0;
}
profile
공부방

0개의 댓글