본문 바로가기
알고리즘 풀이

14888번 연산자 끼워 넣기

by 남생이야 2024. 1. 14.

 

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

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

 

브루트포스를 연습하고 있는데 해당 문제는 DFS로 풀어진걸 참고했다.. 이런 유형은 그냥 DFS가 편한 것 같다.

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <stack>
#include <string>
#include <queue>
#include <cmath>
using namespace std;

#define MAX 11

int n; 
int arr[MAX];
int maxCount = INT_MIN;
int minCount = INT_MAX;
void  getCalculate(int index, int number, int add, int sub, int mul, int div)
{
    if (index == n)
    {
        maxCount = max(maxCount, number);
        minCount = min(minCount, number);
    }
    else
    {
        if (add > 0) getCalculate(index + 1, number + arr[index], add - 1, sub, mul, div);
        if (sub > 0) getCalculate(index + 1, number - arr[index], add , sub-1, mul, div);
        if (mul > 0) getCalculate(index + 1, number * arr[index], add , sub, mul-1, div);
        if (div > 0) getCalculate(index + 1, number / arr[index], add , sub, mul, div-1);
    }
}

int main() {

    int plus, minus, div, mul;
    cin >> n;


    for (int i = 0; i < n; i++)
    {
        int num;
        cin >> num; 
        arr[i] = num; 
    }

    cin >> plus >> minus >> mul >> div;

    getCalculate(1, arr[0], plus, minus, mul, div);
    cout << maxCount << endl;
    cout << minCount << endl;
      

    return 0;
}

'알고리즘 풀이' 카테고리의 다른 글

2961. 도영이가 만든 맛있는 음식  (0) 2024.01.18
1476. 날짜 계산  (0) 2024.01.14
1436. 영화감독 숌  (0) 2024.01.02
1018번 체스판 다시 칠하기  (0) 2023.12.31
1743. 음식물 피하기  (0) 2023.12.25