문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/67257?language=java
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이
1. 연산자 우선순위 순열을 생성한다. -> 총 6가지의 경우의 수가 나옴
: permute() 함수
2. 각 순열의 우선순위에 맞춰 expression을 계산한다.
: calculate() 함수
3. 계산해서 나온 결과 값들의 절대값들 중, 최대의 값을 출력한다.
import java.util.*;
class Solution {
static char[] ops = {'+', '-', '*'}; // 연산자 배열
static boolean[] visited = new boolean[ops.length];
static char[] result = new char[ops.length];
static List<char[]> permuteList = new ArrayList<>();
public long solution(String expression) {
long answer = 0;
// 1. 연산자 우선순위 경우의 수를 가진 순열 구하기
permute(0);
// 2. 해당 연산자에 따라 계산하기
for(char[] permute : permuteList) {
// 2.1 expression을 연산자와 숫자로 분리
List<Long> numList = new ArrayList<>();
List<Character> opsList = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for(int i=0; i<expression.length(); i++) {
char c = expression.charAt(i);
if(c=='+' || c=='-' || c=='*') {
numList.add(Long.parseLong(sb.toString())); // 100과 같은 연속된 숫자가 있을 가능성 고려
opsList.add(c);
sb.setLength(0); // 초기화!
} else {
sb.append(c);
}
}
numList.add(Long.parseLong(sb.toString())); // 마지막 남은 숫자 추가
long temp = calculate(numList, opsList, permute);
answer = Math.max(answer, temp);
}
return answer;
}
static void permute(int depth) {
if(depth == ops.length) {
permuteList.add(result.clone());
}
for(int i=0; i<ops.length; i++) {
if(!visited[i]) {
visited[i] = true;
result[depth] = ops[i];
permute(depth + 1);
visited[i] = false;
}
}
}
static long calculate(List<Long> nums, List<Character> ops, char[] permute) {
List<Long> numList = new ArrayList<>(nums);
List<Character> opsList = new ArrayList<>(ops);
for(char op : permute) {
int i = 0;
while(i < opsList.size()) {
if(opsList.get(i) == op) {
long a = numList.get(i);
long b = numList.get(i+1);
long res = 0;
switch(op) {
case '+': res = a + b; break;
case '-': res = a - b; break;
case '*': res = a * b; break;
}
numList.set(i, res);
numList.remove(i+1);
opsList.remove(i);
} else {
i++;
}
}
}
return Math.abs(numList.get(0));
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 괄호 변환(Java) (1) | 2025.07.02 |
|---|---|
| [프로그래머스] 단어 변환(Java) (1) | 2025.07.01 |
| [프로그래머스] 하노이의 탑(Java) (0) | 2025.05.13 |
| [프로그래머스] 입국심사(Java) (0) | 2025.03.17 |
| [프로그래머스] 지게차와 크레인(Java) (0) | 2025.03.12 |