코딩테스트/백준

[BOJ 14888] 연산자 끼워넣기 (S1)

34suuuuu 2024. 12. 13. 18:16

📍 문제 

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

 

📍 문제 풀이 

조금 헤맸던 부분은 매번 최소인지 최대인지 판별해주는 코드를 넣었더니 결과가 다르게 나왔다.

‼️ 이 부분 주의

📍 전체 코드

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

public class boj_14888 {
	static int[] nums;
	static int[] operators;
	static int n;
	static int maxValue = Integer.MIN_VALUE;
	static int minValue = Integer.MAX_VALUE;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		nums = new int[n];

		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			nums[i] = Integer.parseInt(st.nextToken());
		}

		operators = new int[4];    // 연산자 갯수
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < 4; i++) {
			operators[i] = Integer.parseInt(st.nextToken());
		}

		caclulate(nums[0], 1);
		System.out.println(maxValue);
		System.out.println(minValue);
	}

	// (계산 결과)
	public static void caclulate(int num, int idx) {
		if (idx == n) {
			maxValue = Math.max(maxValue, num);
			minValue = Math.min(minValue, num);
			return;
		}

		for (int i = 0; i < 4; i++) {
			if (operators[i] > 0) {
				operators[i]--;

				if (i == 0) {
					caclulate(num + nums[idx], idx + 1);
				} else if (i == 1) {
					caclulate(num - nums[idx], idx + 1);
				} else if (i == 2) {
					caclulate(num * nums[idx], idx + 1);
				} else if (i == 3) {
					caclulate(num / nums[idx], idx + 1);
				}

				operators[i]++;
			}
		}


	}
}