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;
}
}