풀이
- 연산자가 세가지 뿐이기 때문에 6가지의 경우의 수를 미리 배열에 만들어놓음
- 연산자를 기준으로 string tokenizer로 분리
- return delims를 true로 설정하여 연산자도 반환되게 함
- 6가지 경우에 수에 대하여 계산
- 우선순위 순서대로 계산
- 현재 연산자와 동일한 연산자일 때만 stack에서 하나 꺼내고 list에서 다음 피연산자를 꺼내와 계산
- 결과를 다시 stack에 넣음
더보기
package KakaoIntern2020.P67257_수식최대화;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.StringTokenizer;
public class Solution {
static public long solution(String expression) {
long answer = 0;
List<String> exp = new ArrayList<>();
StringTokenizer st = new StringTokenizer(expression, "*+-", true);
while (st.hasMoreTokens()) {
exp.add(st.nextToken());
}
String[] priority = { "*+-", "*-+", "+*-", "+-*", "-*+", "-+*" };
for (int p = 0; p < priority.length; p++) {
List<String> from = copy(exp);
for (int op = 0; op < 3; op++) {
if (from.size() == 1)
break;
String cur = priority[p].charAt(op) + "";
Stack<String> stack = new Stack<>();
for (int i = 0; i < from.size(); i++) {
if (cur.equals(from.get(i))) {
String first = stack.pop();
String second = from.get(++i);
stack.push(calc(cur, first, second));
continue;
}
stack.add(from.get(i));
}
from = new ArrayList<>(stack);
}
long value = Long.parseLong(from.get(0));
value = value < 0 ? -value : value;
answer = Math.max(answer, value);
}
return answer;
}
private static String calc(String cur, String first, String second) {
long f = Long.parseLong(first);
long s = Long.parseLong(second);
long result = 0L;
switch (cur) {
case "+":
result = f + s;
break;
case "-":
result = f - s;
break;
case "*":
result = f * s;
break;
}
return result + "";
}
private static List<String> copy(List<String> exp) {
List<String> copied = new ArrayList<>();
for (int i = 0; i < exp.size(); i++) {
copied.add(exp.get(i));
}
return copied;
}
public static void main(String[] args) {
System.out.println(solution("100-200*300-500+20"));
System.out.println(solution("50*6-3*2"));
}
}
'알고리즘왕 > Programmers' 카테고리의 다른 글
[프로그래머스/JAVA] 튜플 (0) | 2021.05.04 |
---|---|
[프로그래머스/JAVA] 보석쇼핑 (0) | 2021.05.04 |
[프로그래머스/JAVA] 키패드 누르기 (0) | 2021.05.04 |
[프로그래머스/JAVA] 불량 사용자 (0) | 2021.05.04 |
[프로그래머스/JAVA] 크레인 인형 뽑기 게임 (0) | 2021.05.03 |