https://programmers.co.kr/learn/courses/30/lessons/67257
코딩테스트 연습 - 수식 최대화
IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과
programmers.co.kr
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
class Solution {
private final ArrayList<char[]> cases = new ArrayList<>() {
{
add(new char[]{'+', '-', '*'});
add(new char[]{'+', '*', '-'});
add(new char[]{'*', '+', '-'});
add(new char[]{'*', '-', '+'});
add(new char[]{'-', '+', '*'});
add(new char[]{'-', '*', '+'});
}
};
public long solution(String expression) {
long answer = 0;
ArrayList<String> splitStr = this.getSplitStr(expression);
for (char[] oneCase : this.cases) {
answer = Math.max(answer, Math.abs(this.getResult(oneCase, splitStr)));
}
return answer;
}
private long getResult(char[] oneCase, ArrayList<String> splitStr) {
Deque<String> before = new ArrayDeque<>();
Deque<String> after = new ArrayDeque<>();
for (String s : splitStr) {
after.addLast(s);
}
for (char operator : oneCase) {
before = new ArrayDeque<>(after);
after.clear();
while (!before.isEmpty()) {
String curValue = before.pollFirst();
if (curValue.equals(String.valueOf(operator))) {
String beforeNum = after.pollLast();
String afterNum = before.pollFirst();
switch (operator) {
case '+':
after.addLast(String
.valueOf(Long.parseLong(beforeNum) + Long.parseLong(afterNum)));
break;
case '-':
after.addLast(String
.valueOf(Long.parseLong(beforeNum) - Long.parseLong(afterNum)));
break;
case '*':
after.addLast(String
.valueOf(Long.parseLong(beforeNum) * Long.parseLong(afterNum)));
break;
}
} else {
after.addLast(curValue);
}
}
}
return after.stream().mapToLong(Long::parseLong).sum();
}
private ArrayList<String> getSplitStr(String expression) {
ArrayList<String> splitStr = new ArrayList<>();
String numPart = "";
for (int i = 0; i < expression.length(); i++) {
if (expression.charAt(i) == '+' ||
expression.charAt(i) == '-' ||
expression.charAt(i) == '*') {
splitStr.add(numPart);
splitStr.add(String.valueOf(expression.charAt(i)));
numPart = "";
} else {
numPart += expression.charAt(i);
}
}
splitStr.add(numPart);
return splitStr;
}
}
'Problem-solving > 프로그래머스' 카테고리의 다른 글
프로그래머스 - (2019 카카오 개발자 겨울 인턴십) 튜플 (Java) (0) | 2020.11.23 |
---|---|
프로그래머스 - (2020 KAKAO BLIND RECRUITMENT) 괄호 변환 (Java) (0) | 2020.11.23 |
프로그래머스 - (2020 KAKAO BLIND RECRUITMENT) 문자열 압축 (Java) (0) | 2020.11.23 |
프로그래머스 - (2018 KAKAO BLIND RECRUITMENT) [1차]다트 게임 (Java) (0) | 2020.11.22 |
프로그래머스 - (2019 KAKAO BLIND RECRUITMENT) 실패율 (Java) (0) | 2020.11.22 |
댓글