설명
- 연산을 돌면서 연산자 자리수에 채워넣는다.
- 연산자는 배열로 저장해둔다.
- 앞에수랑 결과는 바로 저장해서 업데이트한다.
코드
public class P14888 {
public static int MAX = Integer.MIN_VALUE;
public static int MIN = Integer.MAX_VALUE;
public static int[] operator = new int[4];
public static int[] number;
public static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
number = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
number[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 4; i++) {
operator[i] = Integer.parseInt(st.nextToken());
}
dfs(number[0], 1);
System.out.println(MAX);
System.out.println(MIN);
}
public static void dfs(int num, int depth) {
if (depth == N) {
MAX = Math.max(MAX, num);
MIN = Math.min(MIN, num);
return;
}
for (int i = 0; i < 4; i++) {
if (operator[i] > 0) {
operator[i]--;
switch (i) {
case 0:
dfs(num + number[depth], depth + 1);
break;
case 1:
dfs(num - number[depth], depth + 1);
break;
case 2:
dfs(num * number[depth], depth + 1);
break;
case 3:
dfs(num / number[depth], depth + 1);
break;
}
operator[i]++;
}
}
}
}