ALGORITHM

[JAVA] 백준 14888번- 연산자 끼워넣기

연듀 2022. 8. 28. 15:35

https://www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 

www.acmicpc.net

 

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{
    static int n; // 숫자 개수
    static int[] operator = new int[4]; // 연산자 배열
    static int[] number; // 숫자 배열
    static int max = Integer.MIN_VALUE;
    static int min = Integer.MAX_VALUE;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        n=Integer.parseInt(br.readLine());
        number = new int[n];

        st=new StringTokenizer(br.readLine(), " ");
        for(int i=0; i<n; i++) number[i] = Integer.parseInt(st.nextToken());

        st=new StringTokenizer(br.readLine(), " ");
        for(int i=0; i<4; i++) operator[i] = Integer.parseInt(st.nextToken());

        dfs(number[0], 1);

        System.out.println(max);
        System.out.println(min);
    }

    public static void dfs(int num, int idx){
        if(idx == n){ // 모든 연산자를 사용했을 때
            max=Math.max(max,num);
            min=Math.min(min,num);
            return;
        }

        for(int i=0; i<4; i++){
            if(operator[i]>0){ // 연산자 개수가 1개 이상일 경우
                operator[i]--; // 해당 연산자 1 감소

                switch(i){
                    case 0: dfs(num+number[idx], idx+1); break;
                    case 1: dfs(num-number[idx], idx+1); break;
                    case 2: dfs(num*number[idx], idx+1); break;
                    case 3: dfs(num/number[idx], idx+1); break;
                }
                operator[i]++; // 재귀 호출 후에는 연산자 개수 복구
            }
        }
    }
}

 

 

 

 

'ALGORITHM' 카테고리의 다른 글

[JAVA] 백준 2581번- 소수  (0) 2022.08.28
[JAVA] 백준 1978번- 소수 찾기  (0) 2022.08.28
[JAVA] 백준 18429번- 근손실  (0) 2022.08.27
[JAVA] 백준 15652번- N과 M(4)  (0) 2022.08.27
[JAVA] 백준 10250번- ACM 호텔  (0) 2022.08.24