[프로그래머스] 수식 최대화
2020. 7. 2. 20:33ㆍ프로그래머스/카카오
import java.util.*;
class Solution {
public long solution(String expression) {
long answer = 0;
List<Long> allAnswer = new ArrayList<>();
String[][] allCase = {{"+","-","*"},{"+","*","-"},{"-","+","*"},{"-","*","+"},
{"*","+","-"},{"*","-","+"}};
for(int i=0; i<allCase.length; i++){
allAnswer.add(calculateAnswer(allCase[i],expression));
}
Collections.sort(allAnswer);
answer = allAnswer.get(allAnswer.size()-1);
return answer;
}
private Long calculateAnswer(String[] oneCase, String expression){
List<String> changeExpression = new ArrayList<>();
int flag =0;
for(int i=0; i<expression.length(); i++){
if(!Character.isDigit(expression.charAt(i))){
changeExpression.add(expression.substring(flag,i));
changeExpression.add(String.valueOf(expression.charAt(i)));
flag=i+1;
}
}
changeExpression.add(expression.substring(flag));
for(int i=0; i<oneCase.length; i++){
for(int j=0; j<changeExpression.size(); j++){
if(changeExpression.get(j).equals(oneCase[i])){
Long num1 = Long.parseLong(changeExpression.get(j-1));
Long num2 = Long.parseLong(changeExpression.get(j+1));
if(oneCase[i].equals("*")){
changeExpression.add(j-1,String.valueOf(num1*num2));
}else if(oneCase[i].equals("-")){
changeExpression.add(j-1,String.valueOf(num1-num2));
}else{
changeExpression.add(j-1,String.valueOf(num1+num2));
}
for(int k=0; k<3; k++){
changeExpression.remove(j);
}
j--;
}
}
}
return Math.abs(Long.parseLong(changeExpression.get(0)));
}
}
1. 리스트의 인덱스 삭제,삽입에 대해 잘 생각해보게 된 문제이다....
2. 경우의수가 6가지 뿐이므로 각 경우의수를 배열로 만들어 우선순위를 정해주었다.
3. 완전 탐색문제이므로 dfs로 푸는 방법을 생각해 봐야겠다.
'프로그래머스 > 카카오' 카테고리의 다른 글
[프로그래머스] 보석 쇼핑 (0) | 2020.07.03 |
---|---|
[프로그래머스] 키패드 누르기 (0) | 2020.07.02 |
[프로그래머스] 자물쇠와 열쇠 (0) | 2020.05.05 |
[프로그래머스] 프렌즈 4블록 (0) | 2020.05.03 |
[프로그래머스] [1차] 셔틀버스 (0) | 2020.04.28 |