반응형
접근 아이디어
연산자 배열이 2, 3, 0, 1 이렇게 주어졌다면 하나씩 줄이고 재귀로 탐색한다.
숫자 배열을 매번 연산해서 재귀 탐색을 진행할 것이므로 depth는 1부터 시작하고 0번째 값을 sum이라는 인자로 보낸다. for문으로 연산자를 하나 선택했다면 calculrator함수를 이용해서 바로 연산을 진행한 뒤 재귀를 수행한다.
잘 한 부분
크게 어렵지 않았고 연산을 따로 함수로 구분해서 보기 편하게 코드를 짯다.
부족한 부분
연산자를 감소시키고 재귀를 돌렸으면 다시 증가시켜야 하는 부분을 깜박했다.
package backjon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 연산자끼워넣기_14888 {
static int T;
static int[] src, op;
static int max, min;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
src = new int[T];
op = new int[4];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < T; i++) {
src[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
op[0] = Integer.parseInt(st.nextToken());
op[1] = Integer.parseInt(st.nextToken());
op[2] = Integer.parseInt(st.nextToken());
op[3] = Integer.parseInt(st.nextToken());
max = Integer.MIN_VALUE;
min = Integer.MAX_VALUE;
recur(1,src[0]);
System.out.println(max);
System.out.println(min);
}
private static void recur(int depth, int sum) {
if(depth == T) {
max = Math.max(max, sum);
min = Math.min(min, sum);
}
for (int i = 0; i < op.length; i++) {
if(op[i] != 0) {
op[i]--;
recur(depth+1, calculrator(i, sum, src[depth]));
op[i]++;
}
}
}
private static int calculrator(int i, int sum, int start) {
switch (i) {
case 0:
return sum + start;
case 1:
return sum - start;
case 2:
return sum * start;
case 3:
return sum / start;
default:
return 0;
}
}
}
반응형
'알고리즘' 카테고리의 다른 글
백준 1003 피보나치 함수 자바 (0) | 2022.03.22 |
---|---|
백준 14889 자바 스타트와 링크 (0) | 2022.03.22 |
백준 2580 스도쿠 자바 (0) | 2022.03.19 |
백준 9663 N-Queen 자바 (0) | 2022.03.17 |
프로그래머스 주차요금계산 자바 (0) | 2022.03.16 |