풀이
- 연산자가 세가지 뿐이기 때문에 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 |