BOJ 14888.연산자 끼워넣기

김규애·2022년 4월 21일
post-thumbnail

CHECK

연산자 우선 순위 무시
최댓값, 최솟값 출력

구현방식

위 check 사항에 따라 연산자 우선 순위를 무시하기 위해
연산자를 선택할 때마다 계산을 해서 값을 넘겨주었다.

코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

int MIN = 1000000000;
int MAX = -1000000000;

int N;
int num[11];
int Operator[4];


void find(int count, int value, int count_OP[]) {
	if (count == N) {
		if (MIN > value)
			MIN = value;
		if (MAX < value)
			MAX = value;
		return;
	}
	else {
		int i;
		for (i = 0; i < 4; i++) {
			if (count_OP[i] < Operator[i]) {
				if (i == 0) {
					count_OP[i]++;
					find(count + 1, value + num[count], count_OP);
					count_OP[i]--;
				}
				else if (i == 1) {
					count_OP[i]++;
					find(count + 1, value - num[count], count_OP);
					count_OP[i]--;
				}
				else if (i == 2) {
					count_OP[i]++;
					find(count + 1, value * num[count], count_OP);
					count_OP[i]--;
				}
				else if (i == 3) {
					count_OP[i]++;
					find(count + 1, value / num[count], count_OP);
					count_OP[i]--;
				}
			}
		}
	}
}

int main(void) {
	int i;
	//input
	scanf("%d", &N);
	for (i = 0;i < N;i++)
		scanf("%d", num + i);
	scanf("%d %d %d %d", Operator, Operator + 1, Operator + 2, Operator + 3);

	int count_OP[4] = { 0 };
	find(1, num[0], count_OP);
	printf("%d\n%d\n", MAX, MIN);
}
profile
코린이

0개의 댓글