Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

전공공부

[BOJ_14888] 연산자 끼워넣기 본문

Study/Problem Solving

[BOJ_14888] 연산자 끼워넣기

monitor 2023. 10. 8. 15:19

설명


연산자 끼워 넣기 연산자의 위치는 그대로고 각각의 기호를 뽑아서 쓴다는 느낌으로 접근했다. 사실 로직 구현 자체는 쉬웠지만 음수 값이 나온다는 것을 간과하여 max의 초기 값을 = 0 으로 잡아서 어디서 틀린지 확인을 많이 했다.

 

코드


package Backtracking;

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

public class BOJ_14888 {
    static int arr[];
    static long max;
    static long min;
    static int N;
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        N = Integer.parseInt(in.readLine());

        StringTokenizer tk = new StringTokenizer(in.readLine()," ");

        arr = new int[N];

        for(int i = 0; i < N; i++){
            arr[i] = Integer.parseInt(tk.nextToken());
        }

        int op[] = new int[4];
        tk = new StringTokenizer(in.readLine()," ");

        max = Integer.MIN_VALUE;
        min = Integer.MAX_VALUE;

        for(int j = 0; j < 4; j++){
            op[j] = Integer.parseInt(tk.nextToken());
        }
        go(0,op,arr[0]);
        System.out.println(max +"\n"+min);
    }

    private static void go(int idx,int[] opertunity,long sum) {
        if(idx == N-1){
            max = Math.max(sum,max);
            min = Math.min(sum,min);
            return;
        }
        for(int i = 0; i < opertunity.length; i++){
            if(opertunity[i] != 0){
                opertunity[i]--;
                if(i == 0) {
                    go(idx + 1, opertunity,sum + arr[idx+1]);
                }
                if(i == 1) {
                    go(idx + 1, opertunity,sum - arr[idx+1]);
                }
                if(i == 2) {
                    go(idx + 1, opertunity,sum * arr[idx+1]);
                }
                if(i == 3) {
                    if(sum < 0) {
                        sum = -(Math.abs(sum) / arr[idx+1]);
                    }else{
                        sum = (sum / arr[idx+1]);
                    }
                    go(idx + 1, opertunity,sum);
                }
                opertunity[i]++;
            }
        }
    }
}

 

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱

www.acmicpc.net

 

'Study > Problem Solving' 카테고리의 다른 글

[BOJ_14712] 넴모넴모 (Easy)  (0) 2023.10.10
[BOJ_16987] 계란으로 계란치기  (0) 2023.10.09
[BOJ_10971] 외판원 순회 2  (0) 2023.10.05
[BOJ_1789] 수들의 합  (1) 2023.10.04
[BOJ_1182] 부분수열의 합  (1) 2023.10.04