[JAVA/14888번] 연산자 끼워넣기*

고지훈·2021년 12월 23일
1

Algorithm

목록 보기
62/68
post-thumbnail

문제


입력 및 출력


풀이

import java.io.*;
import java.util.*;

class Main {
    public static int N;
    public static int[] array;
    public static int[] operator;
    public static int MAX = Integer.MIN_VALUE;
    public static int MIN = Integer.MAX_VALUE;
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // N
        N = Integer.parseInt(br.readLine());

        // 값을 담을 배열
        array = new int[N];
        String[] temp = br.readLine().split(" ");
        for (int i = 0; i < N; i++) {
            array[i] = Integer.parseInt(temp[i]);
        }

        // 연산자를 담을 배열
        operator = new int[4];
        String[] temp2 = br.readLine().split(" ");
        for (int i = 0; i < 4; i++) {
            operator[i] = Integer.parseInt(temp2[i]);
        }

        // DFS함수 호출
        DFS(array[0], 1);

        // 결과 값 출력
        System.out.println(MAX);
        System.out.println(MIN);
    }

    public static void DFS(int number, int index) {
        // 인덱스가 연산자의 개수와 일치할 경우 최댓값과 최솟값을 설정
        if (index == N) {
            MAX = Math.max(MAX, number);
            MIN = Math.min(MIN, number);
        }

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

                // 값 계산
                switch (i) {
                    case 0:
                        DFS(number + array[index], index + 1);
                        break;
                    case 1:
                        DFS(number - array[index], index + 1);
                        break;
                    case 2:
                        DFS(number * array[index], index + 1);
                        break;
                    case 3:
                        DFS(number / array[index], index + 1);
                        break;
                }

                // 다른 값을 계산하기 위해 다시 증가
                operator[i]++;
            }
        }
    }
}

결과 및 해결방법

[결과]

profile
"계획에 따르기보다 변화에 대응하기를"

0개의 댓글