[programmers][X] 수식 최대화

https://school.programmers.co.kr/learn/courses/30/lessons/67257

import java.util.*;

class Solution {

    List<Long> nList = new ArrayList<>();
    List<Character> oList = new ArrayList<>();

    public long solution(String expression) {
        long answer = 0;

        StringBuilder number = new StringBuilder();

        for(char e : expression.toCharArray()){
            if( Character.isDigit(e) ){
                number.append(e);
            }else{
                oList.add(e);
                nList.add(Long.valueOf(number.toString()));
                number.delete(0, number.length());
            }
        }
        nList.add(Long.valueOf(number.toString()));

        answer = Math.max(answer, cal(new char[]{'+','-','*'}));
        answer = Math.max(answer, cal(new char[]{'+','*','-'}));
        answer = Math.max(answer, cal(new char[]{'-','+','*'}));
        answer = Math.max(answer, cal(new char[]{'-','*','+'}));
        answer = Math.max(answer, cal(new char[]{'*','+','-'}));
        answer = Math.max(answer, cal(new char[]{'*','-','+'}));

        return answer;
    }

    public long cal(char[] operators){
        List<Long> nl = new ArrayList<>(nList);
        List<Character> ol = new ArrayList<>(oList);

        for(char o : operators){
            int nidx = 1;
            int oidx = 0;

            while(oidx < ol.size()){
                if(o == ol.get(oidx)){
                    nl.set(nidx, cal(nl.get(nidx-1), nl.get(nidx), ol.get(oidx)));
                    nl.remove(nidx-1);
                    ol.remove(oidx);
                }else{
                    nidx++;
                    oidx++;
                }
            }
        }

        return Math.abs(nl.get(0));
    }

    private static Long cal(Long a, Long b, char c){
        if(c == '-') return a - b;
        else if(c == '+') return a + b;
        else return a * b;
    }
}


© 2023 Lee. All rights reserved.