https://www.acmicpc.net/problem/14888
삼성 SW 역량 테스트 기출 문제
DFS를 사용하여 모든 경우의 수를 탐색해 최솟값과 최댓값을 구한다.
import java.io.*;
import java.util.*;
public class Main {
static int n, min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
static int[] arr;
static int[] operator = new int[4];
public static void operation(int idx, int value) {
if (idx == n) {
min = Math.min(min, value);
max = Math.max(max, value);
return;
}
int num = arr[idx];
for (int i = 0; i < 4; i++) {
if (operator[i] != 0) {
operator[i]--;
switch(i) {
case 0: operation(idx+1, value+num); break;
case 1: operation(idx+1, value-num); break;
case 2: operation(idx+1, value*num); break;
case 3: operation(idx+1, value/num); break;
}
operator[i]++;
}
}
}
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];
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());
}
operation(1, arr[0]);
System.out.print(max + "\n" + min);
}
}
operator
배열에 각 연산자의 개수를 저장한다.operator[i] != 0
) 해당 연산자 개수를 1 감소하고 재귀호출을 한다.idx == n
) 값을 비교하여 min
, max
값을 업데이트한다.