백준 14888 연산자 끼워 넣기

업데이트:

연산자 끼워 넣기

백트래킹을 사용해서 구현함

결과가 -10억에서 10억까진데 처음에 최대값을 0으로 셋팅해서 실패함

백트래킹만 알면 크게 어렵지 않게 풀 수 있는 문제다.

import java.util.Scanner;

public class Operator {
	static int n, minResult, maxResult;
	static int[] nums, operators, changeOperators;
	static boolean[] check;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		nums = new int[n+1];
		check = new boolean[n-1];
		operators = new int[n-1];
		changeOperators = new int[n-1];
		minResult = Integer.MAX_VALUE;
		maxResult = Integer.MIN_VALUE;

		for (int i = 0; i < n; i++) {
			nums[i] = sc.nextInt();
		}
		int index = 0;
		for (int j = 0; j < 4; j++) {
			int num = sc.nextInt();
			for (int i = 0; i < num; i++) {
				operators[index] = j;
				index++;
			}
		}

		per(0);

		System.out.println(maxResult);
		System.out.println(minResult);

	}

	private static void per(int cnt) {
		if (cnt == n - 1) {
			confirm();
			return;
		}
		for (int i = 0; i < n - 1; i++) {
			if (!check[i]) {
				check[i] = true;
				changeOperators[cnt] = operators[i];
				per(cnt + 1);
				check[i] = false;
			}
		}

	}

	private static void confirm() {
		int num = nums[0];
		for (int i = 0; i < n - 1; i++) {

			switch (changeOperators[i]) {
			case 0:
				num += nums[i + 1];
				break;
			case 1:
				num -= nums[i + 1];
				break;
			case 2:
				num *= nums[i + 1];
				break;
			case 3:
				num /= nums[i + 1];
				break;

			}
		}
		maxResult = Math.max(num, maxResult);
		minResult = Math.min(num, minResult);
	}

}

댓글남기기