전공공부
[BOJ_14888] 연산자 끼워넣기 본문
설명
연산자 끼워 넣기 연산자의 위치는 그대로고 각각의 기호를 뽑아서 쓴다는 느낌으로 접근했다. 사실 로직 구현 자체는 쉬웠지만 음수 값이 나온다는 것을 간과하여 max의 초기 값을 = 0 으로 잡아서 어디서 틀린지 확인을 많이 했다.
코드
package Backtracking;
import java.util.*;
import java.io.*;
public class BOJ_14888 {
static int arr[];
static long max;
static long min;
static int N;
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(in.readLine());
StringTokenizer tk = new StringTokenizer(in.readLine()," ");
arr = new int[N];
for(int i = 0; i < N; i++){
arr[i] = Integer.parseInt(tk.nextToken());
}
int op[] = new int[4];
tk = new StringTokenizer(in.readLine()," ");
max = Integer.MIN_VALUE;
min = Integer.MAX_VALUE;
for(int j = 0; j < 4; j++){
op[j] = Integer.parseInt(tk.nextToken());
}
go(0,op,arr[0]);
System.out.println(max +"\n"+min);
}
private static void go(int idx,int[] opertunity,long sum) {
if(idx == N-1){
max = Math.max(sum,max);
min = Math.min(sum,min);
return;
}
for(int i = 0; i < opertunity.length; i++){
if(opertunity[i] != 0){
opertunity[i]--;
if(i == 0) {
go(idx + 1, opertunity,sum + arr[idx+1]);
}
if(i == 1) {
go(idx + 1, opertunity,sum - arr[idx+1]);
}
if(i == 2) {
go(idx + 1, opertunity,sum * arr[idx+1]);
}
if(i == 3) {
if(sum < 0) {
sum = -(Math.abs(sum) / arr[idx+1]);
}else{
sum = (sum / arr[idx+1]);
}
go(idx + 1, opertunity,sum);
}
opertunity[i]++;
}
}
}
}
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱
www.acmicpc.net
'Study > Problem Solving' 카테고리의 다른 글
[BOJ_14712] 넴모넴모 (Easy) (0) | 2023.10.10 |
---|---|
[BOJ_16987] 계란으로 계란치기 (0) | 2023.10.09 |
[BOJ_10971] 외판원 순회 2 (0) | 2023.10.05 |
[BOJ_1789] 수들의 합 (1) | 2023.10.04 |
[BOJ_1182] 부분수열의 합 (1) | 2023.10.04 |