csct3434
[level 2] [카카오 인턴] 수식 최대화 - 67257 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.LinkedList;
import java.util.Stack;
class Solution {
public long solution(String expression) {
long answer = 0;
expression = expression.replace("+", " + ");
expression = expression.replace("-", " - ");
expression = expression.replace("*", " * ");
String[] prioritizedOps = {"+-*", "+*-", "-+*", "-*+", "*-+", "*+-"};
for (String ops : prioritizedOps) {
Stack<String> stack = new Stack<>();
String[] tokens = expression.split(" ");
for (String op : ops.split("")) {
int index = 0;
while (index < tokens.length) {
String token = tokens[index];
if (token.equals(op)) {
String num1 = stack.pop();
String num2 = tokens[index + 1];
stack.push(String.valueOf(calc(num1, op, num2)));
index += 2;
continue;
}
stack.push(tokens[index++]);
}
LinkedList<String> temp = new LinkedList<>();
while (!stack.isEmpty()) {
temp.push(stack.pop());
}
tokens = temp.toArray(new String[0]);
}
answer = Math.max(Math.abs(Long.parseLong(tokens[0])), answer);
}
return answer;
}
private long calc(String num1, String op, String num2) {
if (op.equals("*")) {
return Long.parseLong(num1) * Long.parseLong(num2);
}
if (op.equals("+")) {
return Long.parseLong(num1) + Long.parseLong(num2);
}
return Long.parseLong(num1) - Long.parseLong(num2);
}
}
'프로그래머스' 카테고리의 다른 글
[level 2] 쿼드압축 후 개수 세기 - 68936 (0) | 2024.02.29 |
---|---|
[level 2] 삼각 달팽이 - 68645 (0) | 2024.02.29 |
[level 2] 튜플 - 64065 (0) | 2024.02.29 |
[level 2] 괄호 변환 - 60058 (0) | 2024.02.29 |
[level 2] 문자열 압축 - 60057 (0) | 2024.02.29 |