https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
import java.io.*;
import java.util.*;
public class Main {
static int[] num;
static int[] oper;
static int max = Integer.MAX_VALUE*-1;
static int min = Integer.MAX_VALUE;
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
num = new int[n];
oper = new int[4];
st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i=0; i<4; i++) {
oper[i] = Integer.parseInt(st.nextToken());
}
for(int i=0; i<4; i++) {
getmax(i,num[0],1,oper);
getmin(i,num[0],1,oper);
}
System.out.println(max);
System.out.println(min);
}
public static void getmax(int sidx, int calc, int nidx,int[] oper){
int[] coper = oper.clone();
if(coper[sidx]==0) return;
if(nidx==num.length) {return;}
switch(sidx) {
case 0:
calc = calc + num[nidx];
coper[sidx]--;
break;
case 1:
calc = calc - num[nidx];
coper[sidx]--;
break;
case 2:
calc = calc * num[nidx];
coper[sidx]--;
break;
case 3:
calc = calc/num[nidx];
coper[sidx]--;
break;
}
if(max<calc&&nidx==num.length-1) {
max = calc;
}
for(int i=0; i<4; i++) {
int[] temp = coper.clone();
getmax(i,calc,nidx+1,temp);
}
}
public static void getmin(int sidx, int calc,int nidx,int[] oper){
int[] coper = oper.clone();
if(coper[sidx]==0) return;
if(nidx==num.length) {return;}
switch(sidx) {
case 0:
calc = calc + num[nidx];
coper[sidx]--;
break;
case 1:
calc = calc - num[nidx];
coper[sidx]--;
break;
case 2:
calc = calc * num[nidx];
coper[sidx]--;
break;
case 3:
calc = calc/num[nidx];
coper[sidx]--;
break;
}
if(min>calc&&nidx==num.length-1) {
min = calc;
}
for(int i=0; i<4; i++) {
int[] temp = coper.clone();
getmin(i,calc,nidx+1,temp);
}
}
}
'백준' 카테고리의 다른 글
백준 동적계획법 - 1003번 : 피보나치 함수 (0) | 2022.02.16 |
---|---|
백준 백트래킹 - 14889번 : 스타트와 링크 (1) | 2022.02.16 |
백준 백트래킹 - 2580번 : 스도쿠 (1) | 2022.02.14 |
백준 백트래킹 - 9663번 : N-Queen (1) | 2022.02.11 |
백준 백트래킹 - 15652번 : N과 M (4) (0) | 2022.02.11 |