우보천리 개발
[BJ] 14888 연산자 끼워넣기 Java 본문
반응형
백준 14888 연산자 끼워넣기
문제
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.util.*;
class BJ14888 {
static int[] map;
static int[] operations = new int[4];
static int n;
static int MIN = Integer.MAX_VALUE;
static int MAX = Integer.MIN_VALUE;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
map = new int[n];
for (int i=0; i<n; i++) {
map[i] = sc.nextInt();
}
for (int i=0; i<4; i++) {
operations[i] = sc.nextInt();
}
DFS(map[0], 1);
System.out.println(MAX);
System.out.println(MIN);
}
public static void DFS(int number, int depth) {
if (depth == n) {
MAX = Math.max(MAX, number);
MIN = Math.min(MIN, number);
return;
}
for (int i=0; i<4; i++) {
if (operations[i] > 0) {
operations[i]--;
switch (i) {
case 0:
DFS(number + map[depth], depth + 1);
break;
case 1:
DFS(number - map[depth], depth + 1);
break;
case 2:
DFS(number * map[depth], depth + 1);
break;
case 3:
DFS(number / map[depth], depth + 1);
break;
}
operations[i]++;
}
}
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[BJ] 10825 국영수 Java (0) | 2023.02.01 |
---|---|
[BJ] 18428 감시 피하기 Java (0) | 2023.01.31 |
[BJ] 14502 연구소 Java (0) | 2023.01.30 |
[BJ] 18405 경쟁적 전염 Java (0) | 2023.01.29 |
[BJ] 18405 경쟁적 전염 Java (0) | 2023.01.29 |
Comments