<문제>
<입력>
- #1: 개수 n
- #2: n개의 수열
- #3: 합이 n-1인 4개의 정수(+ - x ÷ 순)
<출력>
<알고리즘>
- 수열 입력값을 받아 배열에 저장
- 결과값을 저장할 배열도 생성(크기 2)
- 재귀탐색을 통해 전체적으로 모두 탐색해서 크기 비교하기(이런 식으로 모두 바꾸는 것이 아니라 하나씩 바꿔서 결과값을 찾을 때는 보통 재귀탐색을 사용한다)
- dfs 재귀함수: 인자(현재 계산된 값, 현재 인덱스-몇번 째 숫자를 사용할 차례인지)
<전체코드>
import java.io.*;
import java.util.*;
public class Main {
static int n;
static int[] arr;
static int[] operator;
static int max = Integer.MIN_VALUE;
static int min = Integer.MAX_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
arr = new int[n];
operator = new int[4];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i=0; i<4; i++) {
operator[i] = Integer.parseInt(st.nextToken());
}
dfs(arr[0],1);
System.out.println(max);
System.out.println(min);
}
private static void dfs(int num, int index) {
if(index == 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+arr[index], index+1);
break;
case 1:
dfs(num-arr[index], index+1);
break;
case 2:
dfs(num*arr[index], index+1);
break;
case 3:
dfs(num/arr[index], index+1);
break;
}
operator[i]++;
}
}
}
}