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를 사용하였다.

성공!

반응형

'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