Leetcode Java Different Ways to Add Parentheses
업데이트:
문제
코드
class Solution {
public List<Integer> diffWaysToCompute(String expression) {
List<Integer> result = new ArrayList<>();
for (int idx = 0; idx < expression.length(); idx++) {
char c = expression.charAt(idx);
if (c == '-' || c == '+' || c == '*') {
List<Integer> first = this.diffWaysToCompute(expression.substring(0, idx));
List<Integer> second = this.diffWaysToCompute(expression.substring(idx + 1));
for (int num1 : first) {
for (int num2 : second) {
switch (c) {
case '-':
result.add(num1 - num2);
break;
case '+':
result.add(num1 + num2);
break;
case '*':
result.add(num1 * num2);
break;
}
}
}
}
}
if (result.isEmpty()) {
result.add(Integer.valueOf(expression));
}
return result;
}
}
결과
설명
- 수학 계산식이 저장된 주어진 문자열 expression를 기반으로 부분 계산을 활용하여 나올 수 있는 값들을 구하는 문제이다.
- 부분 계산이란 소괄호()를 특정 연산 단위로 분리해서 계산을 한 결과를 말한다.
-
부분 계산의 결과를 저장할 컬렉션인 result를 컬렉션으로 정의한다.
- expression을 한 글자 씩 반복하여 idx번째 문자가 ‘-‘, ‘+’, ‘*‘의 계산 연산자인 경우, 아래를 수행한다.
- first에 expression의 처음부터 idx번째 전까지 각 부분 계산을 결과를 넣기 위해 재귀 호출을 수행하고 해당 결과를 넣어준다.
- seconde에 expression의 $idx + 1$번째부터 끝까지 각 부분 계산을 결과를 넣기 위해 재귀 호출을 수행하고 해당 결과를 넣어준다.
-
first와 second를 모두 반복하여 c의 연산자에 따른 결과를 result에 넣어준다.
-
반복이 완료되고 result가 비어있으면 재귀 호출을 통해서 expression에 숫자만 넘어온 경우이므로, result에 expression을 형 변환하여 넣어준다.
- expression을 이용한 결과를 모두 저장한 result를 반환하며, 최초 호출의 경우 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기