[BOJ] 14888번 : 연산자 끼워넣기

ErroredPasta·2022년 2월 28일
0

BOJ

목록 보기
3/21

코드

import java.util.Scanner;

public class Main {

    static int n;
    static int[] numbers;
    static int[] operators = new int[4];
    static StringBuilder sb = new StringBuilder();
    
    static int max = Integer.MIN_VALUE;
    static int min = Integer.MAX_VALUE;

    public static void main(String[] args) {
        input();
        func(0, numbers[0]);
        sb.append(max).append('\n').append(min);
        System.out.println(sb);
    }

    static void input() {
        Scanner scanner = new Scanner(System.in);

        n = scanner.nextInt();
        numbers = new int[n];
        
        for (int i = 0; i < n; ++i) {
            numbers[i] = scanner.nextInt();
        }
        
        for (int i = 0; i < 4; ++i) {
            operators[i] = scanner.nextInt();
        }
        
        scanner.close();
    }
    
    /**
     * @param rec 연산자를 넣을 자리
     * @param value 이전 연산자들을 이용하여 나온 결과
     */
    static void func(int rec, int value) {
        // 모든 연산자를 사용했을 경우
        if (rec == n - 1) {
            min = Integer.min(min, value);
            max = Integer.max(max, value);
            return;
        }
        
        // 4개의 연산자에 대해 남은 연산자가 존재하면
        // 해당 연산자를 사용한다.
        for (int i = 0; i < 4; ++i) {
            if (operators[i] > 0) {
                --operators[i];
                // rec + 1번째 자리에 i번째 연산자를 적용
                func(rec + 1, calculate(value, i, numbers[rec + 1]));
                ++operators[i];
            }
        }
    }
    
    /**
     * @param operand1 숫자 1
     * @param operator 연산자
     * @param operand2 숫자 2
     * @return 연산자로 두 수를 연산한 결과
     */
    static int calculate(int operand1, int operator, int operand2) {
        switch (operator) {
            case 0 : 
                return operand1 + operand2;
                
            case 1 : 
                return operand1 - operand2;
                
            case 2 : 
                return operand1 * operand2;
                
            default : 
                return operand1 / operand2;
        }
    }
}
profile
Hola, Mundo

0개의 댓글