본문 바로가기
algorithm/ACMICPC

연산자 끼워넣기 - 14888

by 에어컨조아 2019. 11. 25.

문제 : 

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

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수이다. 

www.acmicpc.net

 

코드 : 

#include <iostream>
#include <vector>
#include <algorithm>
#include <limits>
using namespace std;

int main()
{
	int n;
	cin >> n;
	//숫자 입력
	int a[100] = { 0 };
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	//기호 갯수입력 +,-,x,/ 순
	int check[4] = { 1,2,3,4 };
	int mon[100] = { 0 };
	int count;
	vector<int> num;
	int ch = 1;
	for (int i = 0; i < 4; i++)
	{
		cin >> count;
		for (int c = 0; c < count; c++)
		{
			num.push_back(ch);
		}
		ch++;
	}

	int min = INT32_MAX;
	int max = INT32_MIN;
	do
	{
		int total = a[0];
		for (int i = 0; i < n - 1; i++)
		{
			if (num[i] == 1)
			{
				total += a[i + 1];
			}
			else if (num[i] == 2)
			{
				total -= a[i + 1];
			}
			else if (num[i] == 3)
			{
				total *= a[i + 1];
			}
			else if (num[i] == 4)
			{
				if (a[i + 1] < 0)
				{
					total /= (-a[i + 1]);
					total *= -1;
				}
				else
				{
					//0일때는??? - acmicpc의 테스트 케이스는 통과, 별도의 지시없음.
					total /= a[i + 1];
				}
			}
		}
		if (min > total)
			min = total;
		if (max < total)
			max = total;
	} while (next_permutation(num.begin(), num.end()));

	cout << max << "\n" << min;
	return 0;
}

'algorithm > ACMICPC' 카테고리의 다른 글

암호 만들기 -1759  (0) 2019.12.03
연산자 끼워넣기 (2) - 15658  (0) 2019.12.03
로또 - 6603  (0) 2019.11.25
외판원 순회2 - 10971  (0) 2019.11.23
테트로미노 - 14500  (0) 2019.11.19

댓글