시나브로

14888. 연산자 끼워넣기 본문

알고리즘/백준

14888. 연산자 끼워넣기

혬혬 2020. 8. 27. 16:15
728x90

전체탐색하면 쉽게 풀리는 문제였지만, 저는 10번정도 틀렸다는.... ㅠㅜ

논리상 문제는 없어보이는데 왜 이렇게 되나 찾아보니

max와 min값의 초기값이 10억과 -10억으로 setting을 해야됩니다. 

2퍼 정도에서 계속 틀리다면 꼭!!! max와 min값의 초기값을 수정하시길!!!!

#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<queue>
#include<math.h>

#define MAX 100000000000000;
using namespace std;

vector<long long> number_list;

long long  maxs = -MAX;
long long mins = MAX;

void dfs(vector<int> operate, int point, long long sum) {
	if (point == number_list.size()) {
		if (maxs < sum)
			maxs = sum;
		if (mins > sum)
			mins = sum;
		return;
	}
	for (int i = 0; i < 4; i++) {
		if (operate[i] > 0) {
			operate[i]--;
			long long value = 0;
			switch (i)
			{
			case 0:
				value = sum + number_list[point];
				break;
			case 1:
				value = sum - number_list[point];
				break;
			case 2:
				value = sum * number_list[point];
				break;
			case 3:
				value = sum / number_list[point];
				break;
			default:
				break;
			}
			dfs(operate, point + 1, value);
			operate[i]++;
		}
	}
}

int main(void) {

	freopen("inp.inp", "r",stdin);
	freopen("out.out", "w", stdout);
	
	int number_amount = 0;
	cin >> number_amount;
	vector<int> operate;
	for (int i = 0; i < number_amount; i++) {
		int a;
		cin >> a;
		number_list.push_back(a);
	}
	for (int i = 0; i < 4; i++) {
		int a;
		cin >> a;
		operate.push_back(a);
	}
	dfs(operate, 1, number_list[0]);
	cout << maxs << endl;
	cout << mins << endl;

	return 0;
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

3190. 뱀  (0) 2020.10.14
14891. 톱니바퀴  (0) 2020.10.14
2583. 영역 구하기  (0) 2020.08.07
2573. 빙산  (0) 2020.08.04
16954. 움직이는 미로 탈출  (0) 2020.08.04
Comments