프로그래머스 - 수식 최대화(Level 2)
2024. 1. 15. 19:09ㆍ코딩테스트 정리(자바)
728x90
import java.util.*;
class 수식_최대화 {
public static String[][] ex={
"*-+".split(""), //연산자 하나씩 담기
"*+-".split(""),
"-*+".split(""),
"-+*".split(""),
"+*-".split(""),
"+-*".split("")
};
public long calculate(long lhs,long rhs,String op){
return switch(op){
case "+"->lhs+rhs;
case "-"->lhs-rhs;
case"*"->lhs*rhs;
default->0;
};
}
public long calculate(List<String> tokens, String[] ex){
for(String op:ex){ //연산자 하나씩
for(int i=0;i<tokens.size();i++){
if(tokens.get(i).equals(op)) { //연산자 같은지 비교
long lhs=Long.parseLong(tokens.get(i-1));
long rhs=Long.parseLong(tokens.get(i+1));
//연산자 기준 +1,-1은 숫자이므로
long result=calculate(lhs,rhs,op);
tokens.remove(i-1); //arraylist는 앞 원소가 제거되면 뒤의 원소가 땡겨지므로 lhs,rhs,연산자 제거 가능
tokens.remove(i - 1);
tokens.remove(i - 1);
tokens.add(i - 1, String.valueOf(result)); //result값을 문자열로 변환후 담기
i -= 2; //원소 2개가 제거되었으므로 i값 2칸 앞으로 조정
}
}
}
return Long.parseLong(tokens.get(0)); //연산을 모두 마쳤을 땐 인덱스 0에 결과값만 남게 됨
}
public long solution(String expression) {
StringTokenizer st=new StringTokenizer(expression,"*+-",true);
//연산자 기준으로 분리해서 토큰에 담기, ture: 연산자들도 담기
List<String> tokens=new ArrayList<>();
while(st.hasMoreTokens()){
tokens.add(st.nextToken());
}
long max=0;
for(String[] str:ex){
long value=Math.abs(
calculate(new ArrayList<>(tokens),str)); //반환값 절댓값 씌우기
if(value>max)
max=value;
}
return max;
}
}
1. StringTokenizer로 숫자와 연산자를 분리하면 되는데 잊고 있었음
StringTokenizer st=new StringTokenizer(expression,"*+-",true);
//연산자 기준으로 분리해서 토큰에 담기, ture: 연산자들도 담기
2. 이렇게 생성할 수도 있음.
new ArrayList<>(tokens)
3. ArrayList는 삽입과 삭제가 동적으로 이뤄지므로 이런 게 가능하다
tokens.remove(i-1); //arraylist는 앞 원소가 제거되면 뒤의 원소가 땡겨지므로 lhs,rhs,연산자 제거 가능
tokens.remove(i - 1);
tokens.remove(i - 1);
tokens.add(i - 1, String.valueOf(result)); //result값을 문자열로 변환후 담기
i -= 2; //원소 2개가 제거되었으므로 i값 2칸 앞으로 조정
4. 향상된 switch문
return switch(op){
case "+"->lhs+rhs;
case "-"->lhs-rhs;
case"*"->lhs*rhs;
default->0;
};728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 프로그래머스 - 불량 사용자(Level 3) (0) | 2024.01.18 |
|---|---|
| 프로그래머스 - 소수 찾기(Level 2) (0) | 2024.01.16 |
| 프로그래머스 - 카펫 (Level 2) (0) | 2024.01.11 |
| 프로그래머스 - 모의고사 (Level 1) (2) | 2024.01.11 |
| 프로그래머스 - 모음 사전(Level 2) (0) | 2024.01.10 |