• Home
  • About
    • Ryureka Moment photo

      Ryureka

      Sin Prisa, Sin Pausa

    • About Me
    • Facebook
    • Github
    • Youtube
  • Projects
  • Posts
    • Posts
    • ProblemSolvings
    • Tags
    • Blog
    • Examples
  • ProblemSolving
    • ProblemSolving
    • BOJ
    • Programmers
    • SWEA
    • LeetCode
  • FrontEnd
    • FrontEnd
    • HTML
  • BackEnd
    • BackEnd
    • Server
      • Server
      • Spring
      • NodeJS
    • DataBase
      • DataBase
      • MySQL
      • MongoDB
  • Programming
    • Programming
    • Java
    • JS
    • Python
    • CleanCode
  • ComputerScience
    • DataStructure
    • Algorithm

[BOJ] 14888. 연산자 끼워넣기

16 Apr 2026

Reading time ~2 minutes

  • 내 풀이
  • 다른 풀이

내 풀이

import java.util.Scanner;

public class Main {
	static int N;
	static int max = Integer.MIN_VALUE;
	static int min = Integer.MAX_VALUE;
	static int[] arr;
	static int[] operCount;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		arr = new int[N];
		operCount = new int[4];

		for(int i = 0; i < N; i++) {
			arr[i] = sc.nextInt();
		}
		
		for(int i = 0; i < 4; i++) {
			operCount[i] = sc.nextInt();			
		}
		
		for(int i = 0; i < 4; i++) {
			if(operCount[i] == 0) continue;
			operCount[i]--;
			solve(arr[0],arr[1],i,1);
			operCount[i]++;
		}
	
		System.out.println(max);
		System.out.println(min);
	}
	
	static void solve(int num1, int num2, int oper, int depth) {
		int result = calc(num1,num2,oper);
		if(depth == N - 1) {
			max = Math.max(max, result);
			min = Math.min(min, result);
			return;
		}
		
		for(int i = 0; i < 4; i++) {
			if(operCount[i] == 0) continue;
			operCount[i]--;
			solve(result,arr[depth+1],i,depth+1);
			operCount[i]++;
		}
	}
	
	static int calc(int num1, int num2, int oper) {
		int result = 0;
		if(oper == 0) result = num1 + num2;
		if(oper == 1) result = num1 - num2;
		if(oper == 2) result = num1 * num2;
		if(oper == 3) result = num1 / num2;
		return result;
	}
}

다른 풀이

import java.util.Scanner;

public class Main {
	public static int N;						 
	public static int[] operCount;	 
	public static int[] arr;					
	public static int MAX = Integer.MIN_VALUE;
	public static int MIN = Integer.MAX_VALUE;
 
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		arr = new int[N];
		operCount = new int[4];
        
		for (int i = 0; i < N; i++) {
			arr[i] = sc.nextInt();
		}
 
		for (int i = 0; i < 4; i++) {
			operCount[i] = sc.nextInt();
		}
 
		solve(arr[0], 1);
 
		System.out.println(MAX);
		System.out.println(MIN);
	}
 
	public static void solve(int num, int index) {
		if (index == N) {
			MAX = Math.max(MAX, num);
			MIN = Math.min(MIN, num);
			return;
		}
 
		for (int i = 0; i < 4; i++) {
			if (operCount[i] == 0) continue;
			operCount[i]--;			
			if(i == 0) solve(num + arr[index], index + 1);
			if(i == 1) solve(num - arr[index], index + 1);
			if(i == 2) solve(num * arr[index], index + 1);
			if(i == 3) solve(num / arr[index], index + 1);
			operCount[i]++;			
		}
	}
}


백트래킹 Share