1월 26일(금) - 6장 완전 탐색
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Solution {
private static String[][] precedences={
"+-*".split(""),
"+*-".split(""),
"-+*".split(""),
"-*+".split(""),
"*+-".split(""),
"*-+".split(""),
};
private long calculate(long lhs, long rhs, String op){
return switch (op){
case "+" -> lhs + rhs;
case "-" -> lhs - rhs;
case "*" -> lhs * rhs;
default -> 0;
};
}
private long calculate(List<String> tokens, String[] precedence){
for(String op : precedence)
{
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));
long result = calculate(lhs, rhs, op);
tokens.remove(i-1);
tokens.remove(i-1);
tokens.remove(i-1);
tokens.add(i-1, String.valueOf(result));
i -= 2;
}
}
}
return Long.parseLong(tokens.get(0));
}
public long solution(String expression){
StringTokenizer st = new StringTokenizer(expression, "+-*",true);
List<String> tokens = new ArrayList<>();
while (st.hasMoreTokens())
{
tokens.add(st.nextToken());
}
long max = 0;
for(String[] precedence : precedences)
{
long value = Math.abs(
calculate(new ArrayList<>(tokens), precedence));
if(value > max)
{
max = value;
}
}
return max;
}
}
댓글