1
+ package backjoon ;
2
+ // https://www.acmicpc.net/problem/14888
3
+ // 연산자 끼워넣기
4
+
5
+ import java .io .BufferedReader ;
6
+ import java .io .IOException ;
7
+ import java .io .InputStreamReader ;
8
+ import java .util .StringTokenizer ;
9
+
10
+ public class _14888 {
11
+ public static int N ; // 주어진 숫자 개수
12
+ public static int [] number ; // 숫자
13
+ public static int [] operator = new int [4 ]; // 덧셈, 뺄셈, 곱셈, 나눗셈 각각의 개수
14
+ public static int MAX = Integer .MIN_VALUE ; // 최댓값
15
+ public static int MIN = Integer .MAX_VALUE ; // 최솟값
16
+
17
+ public static void main (String [] args ) throws IOException {
18
+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
19
+ // memory 13680 runtime 84
20
+ N = Integer .parseInt (br .readLine ());
21
+ number = new int [N ];
22
+
23
+ // 숫자들 배열에 넣기
24
+ StringTokenizer st = new StringTokenizer (br .readLine (), " " );
25
+ for (int i = 0 ; i < N ; i ++) {
26
+ number [i ] = Integer .parseInt (st .nextToken ());
27
+ }
28
+
29
+ // 연산자 배열에 넣기
30
+ st = new StringTokenizer (br .readLine (), " " );
31
+ for (int i = 0 ; i < 4 ; i ++) {
32
+ operator [i ] = Integer .parseInt (st .nextToken ());
33
+ }
34
+
35
+ dfs (number [0 ], 1 );
36
+
37
+ System .out .println (MAX );
38
+ System .out .println (MIN );
39
+
40
+ }
41
+
42
+ public static void dfs (int num , int idx ) {
43
+ if (idx == N ) {
44
+ MAX = Math .max (MAX , num );
45
+ MIN = Math .min (MIN , num );
46
+ return ;
47
+ }
48
+
49
+ for (int i = 0 ; i < 4 ; i ++) {
50
+ // 연산자 개수가 1개 이상인 경우
51
+ if (operator [i ] > 0 ) {
52
+
53
+ // 해당 연산자를 1 감소시킨다.
54
+ operator [i ]--;
55
+
56
+ switch (i ) {
57
+
58
+ case 0 :
59
+ dfs (num + number [idx ], idx + 1 );
60
+ break ;
61
+ case 1 :
62
+ dfs (num - number [idx ], idx + 1 );
63
+ break ;
64
+ case 2 :
65
+ dfs (num * number [idx ], idx + 1 );
66
+ break ;
67
+ case 3 :
68
+ dfs (num / number [idx ], idx + 1 );
69
+ break ;
70
+
71
+ }
72
+ // 재귀호출이 종료되면 다시 해당 연산자 개수를 복구한다.
73
+ operator [i ]++;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ /*
79
+ INPUT
80
+ 2
81
+ 5 6
82
+ 0 0 1 0
83
+
84
+ OUTPUT
85
+ 30
86
+ 30
87
+ */
0 commit comments