본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 14888번] 연산자 끼워넣기(JAVA)

by 테크케찰 2020. 10. 6.

www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

import java.io.*;
import java.util.*;

class Main{
   
   static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
   static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
   static StringBuilder sb=new StringBuilder();
   static int N;
   static int[] number, operator;
   static int max=Integer.MIN_VALUE, min=Integer.MAX_VALUE;
   
   public static void main(String args[]) throws Exception {
	   N=Integer.parseInt(br.readLine());
	   number=new int[N];
	   operator=new int[4];
	   String s[]=br.readLine().split(" ");
	   for(int i=0;i<N;i++) {
		   number[i]=Integer.parseInt(s[i]);
	   }
	   String s2[]=br.readLine().split(" ");
	   for(int i=0;i<4;i++) {
		   operator[i]=Integer.parseInt(s2[i]);
	   }
	   function(1, number[0]);
	   bw.write(max+"\n"+min);
	   bw.flush();
	   bw.close();
   }
   
   public static void function(int n, int result) {
	   for(int i=0;i<4;i++) {
		   if(operator[i]!=0) {
			   operator[i]--;
			   switch(i) {
			   case 0:
				   function(n+1, result+number[n]);
				   break;
			   case 1:
				   function(n+1, result-number[n]);
				   break;
			   case 2:
				   function(n+1, result*number[n]);
				   break;
			   case 3:
				   function(n+1, result/number[n]);
				   break;
			   }
			   operator[i]++;	
		   }
	   }
	   
	   if(n==N) {
		   max=Math.max(max, result);
		   min=Math.min(min, result);
	   }
   }
}