CodingTest/Programmers
[Programmers] 수식 최대화
창브로
2025. 5. 20. 21:31
[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/67257
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[코드]
import java.util.*;
class Solution {
public long solution(String expression) {
long answer = 0;
// 모든 경우의 수
String[][] mix = new String[][] {
{"+", "-", "*"},
{"+", "*", "-"},
{"-", "*", "+"},
{"-", "+", "*"},
{"*", "-", "+"},
{"*", "+", "-"}
};
// 수와 식을 분리
StringBuilder sb = new StringBuilder();
List<String> strList = new ArrayList<>();
char[] cArr = expression.toCharArray();
for(char c : cArr) {
if(Character.isDigit(c)) {
sb.append(c);
} else {
strList.add(sb.toString());
sb = new StringBuilder();
strList.add(Character.toString(c));
}
}
strList.add(sb.toString());
// +,-,* 모든 우선순위 탐색 우선순위
for(String[] m : mix) {
// 복제 (다른 우선순위로도 해야 하니까 원본 훼손 X)
List<String> tmp = new ArrayList<>(strList);
// 우선순위로 하나하나 계산
for(int i = 0; i < 3; i++) {
String value = m[i];
for(int j = 0; j < tmp.size();) {
if(tmp.get(j).equals(value)) {
long a = Long.parseLong(tmp.get(j-1));
long b = Long.parseLong(tmp.get(j+1));
long c = 0;
if(value.equals("+")) {
c = a+b;
}
if(value.equals("-")) {
c = a-b;
}
if(value.equals("*")) {
c = a*b;
}
// 3개 지움(지우면 자동으로 앞으로 한칸 땡기기 때문에 같은 idx 지워야함)
tmp.remove(j-1);
tmp.remove(j-1);
tmp.remove(j-1);
// 계산 값 저장
tmp.add(j-1, String.valueOf(c));
// 처음부터
j = 0;
} else {
j++;
}
}
}
// abs 함수 통해서 절대값 적용
long result = Math.abs(Long.parseLong(tmp.get(0)));
// 가장 큰 값을 구해야 하기 때문에 answer에 미리 저장해놓은 result값과 비교
answer = Math.max(answer, result);
}
return answer;
}
}
[회고]
문제 자체는 쉬운데 막상 구현하려고 하니까 너무 어려웠습니다.
모든 경우의 수를 구하고 모든 걸 검색하려고 했지만 구현을 하지 못해 풀지 못했고
풀이 과정을 보며 스스로 풀어보았습니다.
Character.isDigit('값') -> 값이 숫자면 True 아니면 False
질문과 피드백은 언제나 환영입니다.
감사합니다.