본문 바로가기
문제풀이/백준

[백준] 14888번: 연산자 끼워넣기 (Java/자바)

by StarDev 2024. 7. 28.
반응형
SMALL

 

문제

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

 

문제풀이

기초 구현 문제이다. 사실 이러한 형식으로 나오는 문제 중에서는 단순 구현 보다는 DP 문제가 더 많은데 난이도가 쉬운 문제로 출제가 되면서 단순 구현으로도 풀 수 있는 난이도의 문제로 출제 되었다. 해당 문제는 순서대로 읽어보고 차례대로 구현하면 별 이상 없이 바로 맞출 수 있는 문제이다.

 

소스코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	public static int N, min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
	public static int[] arr, operator = new int[4];
	
    public static void main(String[] args) throws Exception {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	N = Integer.parseInt(br.readLine());
    	arr = new int[N];
    	
    	StringTokenizer st = new StringTokenizer(br.readLine(), " ");
    	for(int i = 0; i < N; i++) {
    		arr[i] = Integer.parseInt(st.nextToken());
    	}
    	
    	st = new StringTokenizer(br.readLine(), " ");
    	for(int i = 0; i < 4; i++) {
    		operator[i] = Integer.parseInt(st.nextToken());
    	}
    	
    	process(new int[]{0, 0, 0, 0}, new ArrayList<Integer>());
    	System.out.println(max);
    	System.out.println(min);
    }
    
    public static void process(int[] op, ArrayList<Integer> list) {
    	if(op[0] == operator[0] && op[1] == operator[1] && op[2] == operator[2] && op[3] == operator[3]) {
    		int value = calc(list);
    		min = Math.min(min, value);
    		max = Math.max(max, value);
    		return;
    	}
    	
    	for(int i = 0; i < 4; i++) {
    		if(op[i] >= operator[i]) continue;
    		list.add(i);
    		op[i]++;
    		process(op, list);
    		op[i]--;
    		list.remove(list.size()-1);
    	}
    }
    
    public static int calc(ArrayList<Integer> list) {
    	int res = arr[0];
    	
    	for(int i = 1; i < N; i++) {
    		int tmp = arr[i];
    		switch(list.get(i-1)) {
	    		case 0:
	    			res += tmp;
	    			break;
	    		case 1:
	    			res -= tmp;
	    			break;
	    		case 2:
	    			res *= tmp;
	    			break;
	    		case 3:
	    			res /= tmp;
	    			break;
	    		default :
	    			break;
    		}
    	}
    	
    	return res;
    }
}
반응형
LIST

댓글