반응형
백준 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를 사용하였다.
성공!
반응형
'Computer Science > 백준' 카테고리의 다른 글
백준 1966번 프린터 큐 (0) | 2021.08.11 |
---|---|
백준 14889번 스타트와 링크 (0) | 2020.03.12 |
백준 2580번 스도쿠 (0) | 2020.03.12 |
백준 9663번 N-Queen (0) | 2020.03.12 |
백준 15652번 N과 M (4) (0) | 2020.03.11 |