백준백준 14888 연산자끼워넣기(JAVA - 순열조합 / DFS)왈독2019.10.01 · 조회 132 · 좋아요 0 1. 순열조합 방식import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class Main { public static int N, max = Integer.MIN_VALUE, min = Integer.MAX_VALUE; public static int[] arr, calc; public static boolean[] v; public static ArrayList<Integer> al; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; N = Integer.parseInt(br.readLine()); arr = new int[N]; st = new StringTokenizer(br.readLine()); for (int i = 0; i < N; i++) { arr[i] = Integer.parseInt(st.nextToken()); } // 숫자 st = new StringTokenizer(br.readLine()); // 0: + | 1: - | 2: * | 3: / al = new ArrayList<Integer>(); for (int i = 0; i < 4; i++) { int x = Integer.parseInt(st.nextToken()); while (x-- > 0) { al.add(i); } } // FOR LOOP END calc = new int[N-1]; v = new boolean[N-1]; permcomb(0); System.out.println(max); System.out.println(min); } public static void permcomb(int cnt) { if (cnt == N-1) { int sol = calcprocess(); min = min < sol?min:sol; max = max>sol?max:sol; return; } for (int i = 0; i < N-1; i++) { if (!v[i]) { v[i] = true; calc[cnt] = al.get(i); permcomb(cnt+1); v[i] = false; } } } public static int calcprocess() { int sol = arr[0]; for(int i = 0; i<N-1; i++) { switch(calc[i]) { case 0: // + sol += arr[i+1]; break; case 1: // - sol -= arr[i+1]; break; case 2: // * sol *= arr[i+1]; break; case 3: // / sol /= arr[i+1]; break; } } return sol; } } 2. DFS import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class Main { public static int N, max = Integer.MIN_VALUE, min = Integer.MAX_VALUE; public static int[] arr; public static boolean[] v; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; N = Integer.parseInt(br.readLine()); arr = new int[N]; int[] calc = new int[4]; st = new StringTokenizer(br.readLine()); for (int i = 0; i < N; i++) { arr[i] = Integer.parseInt(st.nextToken()); } // 숫자 st = new StringTokenizer(br.readLine()); // 0: + | 1: - | 2: * | 3: / for (int i = 0; i < 4; i++) { calc[i] = Integer.parseInt(st.nextToken()); } // FOR LOOP END calcprocess(calc[0], calc[1],calc[2],calc[3],arr[0], 0); System.out.println(max); System.out.println(min); } public static void calcprocess(int op0, int op1, int op2, int op3, int sol, int cnt) { if(cnt == N-1) { max = max>sol?max:sol; min = min<sol?min:sol; return; } if(op0>0) { calcprocess(op0-1, op1, op2, op3, sol+arr[cnt+1], cnt+1); }if(op1>0) { calcprocess(op0, op1-1, op2, op3, sol-arr[cnt+1], cnt+1); }if(op2>0) { calcprocess(op0, op1, op2-1, op3, sol*arr[cnt+1], cnt+1); }if(op3>0) { calcprocess(op0, op1, op2, op3-1, sol/arr[cnt+1], cnt+1); } } }왈독 왈독님의 창작활동을 응원하고 싶으세요?후원하기 이전글백준 17471 게리맨더링 (JAVA)다음글백준 1992 쿼드트리 (Java)알고리즘 공부구독자 3명0개의 댓글