반응형
import java.util.*;
class Solution {
static String[][] combinations = {{"+","-","*"},{"+","*","-"},{"-","+","*"},{"-","*","+"},{"*","+","-"},{"*","-","+"}};
public long solution(String expression) {
String split[] = expression.split("(?<=[*/()+-])|(?=[*/+()-])");
long answer = 0;
for(String combination[] : combinations) {
ArrayList<String> list = new ArrayList<>(Arrays.asList(split));
for(String combi : combination) {
ArrayList<String> next = new ArrayList<>();
next.add(list.get(0));
for(int i=1;i<list.size();i+=2) {
if(combi.equals(list.get(i))){
String prev = next.get(next.size() - 1);
String cur = calc(prev,list.get(i+1),list.get(i));
next.set(next.size() - 1, cur);
}else {
next.add(list.get(i));
next.add(list.get(i+1));
}
}
list = next;
}
long value = Long.parseLong(list.get(0));
answer = Math.max(Math.abs(value),answer);
}
return answer;
}
public static String calc(String num1, String num2, String ch) {
switch(ch) {
case "+":
return (Long.parseLong(num1) + Long.parseLong(num2))+"";
case "-":
return (Long.parseLong(num1) - Long.parseLong(num2))+"";
case "*":
return (Long.parseLong(num1) * Long.parseLong(num2))+"";
default:
return "";
}
}
}
숫자와 사칙 연산을 분리하는 정규표현식은 (?<=[*/()+-])|(?=[*/+()-]) 입니다.
이 방법으로 String 문자열을 ArrayList로 분리합니다.
분리된 ArrayList를 세개의 사칙연산 우선순위에 따라 먼저계산합니다.
이때 계산된 ArrayList를 합쳐진 List로 관리합니다.
반응형
'ProgramSoliving' 카테고리의 다른 글
프로그래머스 : 금과 은 운반하기 (0) | 2021.09.22 |
---|---|
프로그래머스 : 미로 탈출 (1) | 2021.09.10 |
프로그래머스: 위클리코드 3주차 (퍼즐조각 채우기) (0) | 2021.08.20 |
프로그래머스 : 보석 쇼핑 (0) | 2021.08.03 |
프로그래머스 : 다단계 칫솔 판매 (JavaScript) (0) | 2021.08.03 |