본문 바로가기
알고리즘

[JAVA]백준 15658번: 연산자 끼워넣기 (2)

by Kwoncorin 2020. 10. 14.
728x90

www.acmicpc.net/problem/15658

 

15658번: 연산자 끼워넣기 (2)

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1보다 크거나 같고, 4N보다 작거나 같은 4개의 정수가 주어지는데, 차례대�

www.acmicpc.net

 

1. 문제 설명

 

14888번 연산자 끼워넣기와 동일한 문제이다.

 

www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

다만 연산자의 개수가 증가하여서 이 점만 주의해서 코드를 작성하면 될 것 같다.

 

2. 코드

 

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    static char[] sign=new char[10];
    static int k;
    static int[] array;
    static int[] operator=new int[4];
    static int min_value=1000000000;
    static int max_value=-1000000000;

    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);

        k=scan.nextInt();

        int total=0;

        array=new int[k];

       for(int i=0;i<k;i++)
           array[i]=scan.nextInt();

       for(int i=0;i<4;i++)
           operator[i]=scan.nextInt();

       find(1,array[0]);

        System.out.println(max_value);
        System.out.println(min_value);

        scan.close();
    }

    public static void find(int index,int sum){
        if(index==k){
            min_value=Math.min(sum,min_value);
            max_value=Math.max(sum,max_value);
            return ;
        }


        int base=array[index];


        for(int i=0;i<4;i++)
        {
            if(operator[i]<=0)
                continue;

            int temp_sum=sum;

            if(i==0)
                temp_sum+=base;
            else if(i==1)
                temp_sum-=base;
            else if(i==2)
                temp_sum*=base;
            else
                temp_sum/=base;

            operator[i]--;
            find(index+1,temp_sum);
            operator[i]++;

        }

        return;
    }

}
728x90