코드와이
[BAEKJOON] 14888. 연산자 끼워넣기 본문
백트래킹
문제링크
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
package acmicpc.Silver1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 연산자_끼워넣기 {
static int n, ansMax, ansMin;
static int[] arr, op;
static boolean[] checked;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
arr = new int[n]; // input 숫자
checked = new boolean[n];
for(int i = 0 ; i < n ; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
op = new int[4]; // 연산자 갯수
for(int i = 0 ; i < 4 ; i++) {
op[i] = Integer.parseInt(st.nextToken());
}
ansMax = Integer.MIN_VALUE;
ansMin = Integer.MAX_VALUE;
go(1, arr[0]);
System.out.println(ansMax + "\n" + ansMin);
}
public static void go(int idx, int sum) {
if(idx == n) {
ansMax = Math.max(ansMax, sum);
ansMin = Math.min(ansMin, sum);
return;
}
int num = arr[idx];
// 연산 가능한 operation
for(int j = 0 ; j < 4 ; j++) {
if(op[j] > 0) {
op[j]--;
go(idx+1, operation(sum, num, j));
op[j]++;
}
}
}
private static int operation(int sum, int num, int i) {
switch (i) {
case 0: // 덧셈
sum += num;
break;
case 1: // 뺄셈
sum -= num;
break;
case 2: // 곱셈
sum *= num;
break;
case 3: // 나눗셈
sum /= num;
break;
}
return sum;
}
}
'acmicpc' 카테고리의 다른 글
[BAEKJOON] 1005. ACM Craft (0) | 2021.04.05 |
---|---|
[BAEKJOON] 2252. 줄 세우기 (0) | 2021.04.05 |
[BAEKJOON] 9663. N-Queen (0) | 2021.04.04 |
[BAEKJOON] 1759. 암호 만들기 (0) | 2021.04.04 |
[BAEKJOON] 1932. 정수 삼각형 (0) | 2021.03.27 |