[BOJ] 14888. 연산자 끼워넣기
16 Apr 2026
Reading time ~2 minutes
내 풀이
import java.util.Scanner;
public class Main {
static int N;
static int max = Integer.MIN_VALUE;
static int min = Integer.MAX_VALUE;
static int[] arr;
static int[] operCount;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
arr = new int[N];
operCount = new int[4];
for(int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
for(int i = 0; i < 4; i++) {
operCount[i] = sc.nextInt();
}
for(int i = 0; i < 4; i++) {
if(operCount[i] == 0) continue;
operCount[i]--;
solve(arr[0],arr[1],i,1);
operCount[i]++;
}
System.out.println(max);
System.out.println(min);
}
static void solve(int num1, int num2, int oper, int depth) {
int result = calc(num1,num2,oper);
if(depth == N - 1) {
max = Math.max(max, result);
min = Math.min(min, result);
return;
}
for(int i = 0; i < 4; i++) {
if(operCount[i] == 0) continue;
operCount[i]--;
solve(result,arr[depth+1],i,depth+1);
operCount[i]++;
}
}
static int calc(int num1, int num2, int oper) {
int result = 0;
if(oper == 0) result = num1 + num2;
if(oper == 1) result = num1 - num2;
if(oper == 2) result = num1 * num2;
if(oper == 3) result = num1 / num2;
return result;
}
}
다른 풀이
import java.util.Scanner;
public class Main {
public static int N;
public static int[] operCount;
public static int[] arr;
public static int MAX = Integer.MIN_VALUE;
public static int MIN = Integer.MAX_VALUE;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
arr = new int[N];
operCount = new int[4];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
for (int i = 0; i < 4; i++) {
operCount[i] = sc.nextInt();
}
solve(arr[0], 1);
System.out.println(MAX);
System.out.println(MIN);
}
public static void solve(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 (operCount[i] == 0) continue;
operCount[i]--;
if(i == 0) solve(num + arr[index], index + 1);
if(i == 1) solve(num - arr[index], index + 1);
if(i == 2) solve(num * arr[index], index + 1);
if(i == 3) solve(num / arr[index], index + 1);
operCount[i]++;
}
}
}