백준 알고리즘 풀이 14888번 - 연산자 끼워넣기

2021. 7. 6. 17:27프로그래밍/백준 알고리즘

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

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

 

 

 


 

- 순열문제 or dfs 문제

 

알고리즘


1. 숫자는 고정 시켜두고 순열 알고리즘을 통해 기호들을 배열함

 

소스코드


#include <iostream>
using namespace std;

char ca[5] = {' ','+','-','X','/'};
char arr[12];
int nums[12];
int n;
int maximum = -100000001;
int minimum = 100000001;

void swap(int a,int b){
    char temp = arr[a];
    arr[a]= arr[b];
    arr[b] = temp;
}

void permu(int start,int end)
{
    if(end==start){
        int ans = nums[1];
        for(int i=1;i<n;i++){
            if(arr[i]=='+'){
                ans += nums[i+1];
            }
            else if(arr[i]=='X'){
                ans=ans*nums[i+1];
            }
            else if(arr[i]=='/'){
                ans = ans/nums[i+1];
            }
            else if(arr[i]=='-'){
                ans = ans-nums[i+1];
            }
        }
        if(ans>maximum){
            maximum = ans;
        }
        if(ans<minimum){
            minimum = ans;
        }
    }
    for(int i=start;i<n;i++){
        swap(start,i);
        permu(start+1,end);
        swap(start,i);
    }
}

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>nums[i];
    }
    int count =0;
    for(int i=1;i<=4;i++){
        int a;
        cin>>a;
        for(int j=1+count;j<=a+count;j++){
            arr[j] = ca[i];
        }
        count+= a;
    }
    
    permu(1,n-1);
    cout<<maximum<<endl;
    cout<<minimum;
}

 

 

틀린 내용이나 지적 언제나 환영입니다.

도움이 되었다면 하트 한번씩 눌러주세요:)