수식 최대화

LJM·2023년 8월 14일
0

programmers

목록 보기
56/92

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

ArrayList 에서 add(인덱스, 값) 로 특정위치에 넣고
remove(인덱스) 특정위치 지울 수 있다는사실을
모른다면 실전에서 못푸는 문제다

처음에 Queue 2개를 사용해서 풀어보려다가 어찌나 꼬이던지 싹 지우고
다시 짯다...

import java.util.*;

class Solution {

    ArrayList<Long> arrnum;
    ArrayList<Character> op;


    public long solution(String expression) {

        StringBuilder sb = new StringBuilder();

        arrnum = new ArrayList<>();
        op = new ArrayList<>();

        for(int i = 0; i < expression.length(); ++i)
        {
            char c = expression.charAt(i);
            if(isNum(c))
            {
                sb.append(c);
            }
            else
            {
                op.add(c);
                arrnum.add(Long.parseLong(sb.toString()));
                sb.setLength(0);
            }
        }
        arrnum.add(Long.parseLong(sb.toString()));

        //+-*
        char[][] seq = {{'+','-','*'},{'+','*','-'},{'-','+','*'},{'-','*','+'},{'*','+','-'},{'*','-','+'}};

        long maxmoney = 0;

        for(int i = 0; i < 6; ++i)
        {
            List<Long> tempNums = new ArrayList<>(arrnum);
            List<Character> tempOps = new ArrayList<>(op);

            for(int j = 0; j < 3; ++j)
            {
                char curop = seq[i][j];
                for(int k = 0; k < tempOps.size(); ++k)
                {
                    if(tempOps.get(k)== curop)
                    {
                        long a = tempNums.remove(k);
                        long b = tempNums.remove(k);
                        tempOps.remove(k);
                        long ret = 0;
                        if(curop == '+')
                            ret = a+b;
                        else if(curop=='-')
                            ret = a-b;
                        else
                            ret = a*b;
                        tempNums.add(k, ret);
                        k--;
                    }
                }
            }
            maxmoney = Math.max(maxmoney, Math.abs(tempNums.get(0)));
        }

        return maxmoney;
    }

    public boolean isNum(char c)
    {
        if(c >= '0' && c <= '9')
            return true;
        return false;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글