Computer Science/백준
백준 14888번 연산자 끼워넣기
Dior2ky
2020. 3. 12. 18:36
반응형
백준 14888번 연산자 끼워넣기 문제이다.

연산자 끼워넣기 문제이다.
역시 백트래킹 문제이고 이전에 N과 M 문제는 숫자를 하나씩 넣어가면서 수열을 만드는 것이었다면
이번에는 연산자를 하나씩 넣어서 확인하는 방식이다.

숫자와 연산자 갯수를 배열에 넣어주고 연산자를 하나씩 골라가면서 연산을 해주면 될 것으로 보인다.
최댓값, 최솟값을 구해야 하기 때문에 연산자를 모두 쓰는 순간, 나온 값을 최댓값 최솟값과 비교하여 갱신해주면 될 것이다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int n;
static int max = -1000000000;
static int min = 1000000000;
static int[] num_arr = new int[100];
static int[] oper = new int[4];
static BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( System.out ) );
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
n = Integer.parseInt(br.readLine());
String s = br.readLine();
StringTokenizer st = new StringTokenizer(s);
for(int i = 0; i < n; i++){
num_arr[i] = Integer.parseInt(st.nextToken());
}
s = br.readLine();
st = new StringTokenizer(s);
for(int i = 0; i < 4; i++){
oper[i] = Integer.parseInt(st.nextToken());
}
solve(oper, 0, num_arr[0]);
bw.write(String.valueOf(max) + '\n');
bw.write(String.valueOf(min) + '\n');
bw.flush();
}
public static void solve(int[] oper , int cnt, int result) throws IOException {
if(cnt == n-1){
if(max < result){
max = result;
}
if(min > result){
min = result;
}
}
else{
if(oper[0] > 0){
oper[0]--;
solve(oper, cnt + 1, result + num_arr[cnt + 1]);
oper[0]++;
}
if(oper[1] > 0){
oper[1]--;
solve(oper, cnt + 1, result - num_arr[cnt + 1]);
oper[1]++;
}
if(oper[2] > 0){
oper[2]--;
solve(oper, cnt + 1, result * num_arr[cnt + 1]);
oper[2]++;
}
if(oper[3] > 0){
oper[3]--;
solve(oper, cnt + 1, result / num_arr[cnt + 1]);
oper[3]++;
}
}
}
}
언어는 java를 사용하였다.

성공!
반응형