알고리즘/백준알고리즘
[14888/Java] 연산자 끼워넣기
HoSeongYu
2021. 12. 31. 13:21
문제

입력 및 출력

풀이
import java.io.*;
import java.util.*;
class Main {
public static int N;
public static int[] array;
public static int[] operator;
public static int MAX = Integer.MIN_VALUE;
public static int MIN = Integer.MAX_VALUE;
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// N
N = Integer.parseInt(br.readLine());
// 값을 담을 배열
array = new int[N];
String[] temp = br.readLine().split(" ");
for (int i = 0; i < N; i++) {
array[i] = Integer.parseInt(temp[i]);
}
// 연산자를 담을 배열
operator = new int[4];
String[] temp2 = br.readLine().split(" ");
for (int i = 0; i < 4; i++) {
operator[i] = Integer.parseInt(temp2[i]);
}
// DFS함수 호출
DFS(array[0], 1);
// 결과 값 출력
System.out.println(MAX);
System.out.println(MIN);
}
public static void DFS(int number, int index) {
// 인덱스가 연산자의 개수와 일치할 경우 최댓값과 최솟값을 설정
if (index == N) {
MAX = Math.max(MAX, number);
MIN = Math.min(MIN, number);
}
for (int i = 0; i < 4; i++) {
// 연산자의 개수가 1이상일 경우
if (operator[i] > 0) {
operator[i]--;
// 값 계산
switch (i) {
case 0:
DFS(number + array[index], index + 1);
break;
case 1:
DFS(number - array[index], index + 1);
break;
case 2:
DFS(number * array[index], index + 1);
break;
case 3:
DFS(number / array[index], index + 1);
break;
}
// 다른 값을 계산하기 위해 다시 증가
operator[i]++;
}
}
}
}