문제
https://leetcode.com/problems/different-ways-to-add-parentheses/submissions/
수식으로 만들어 낼 수 있는 결과 값의 리스트를 리턴하면 되는 문제
풀이
완전탐색을 이용하여 문제를 푼다.
알고리즘 순서
- 연산자를 만나면, 연산자 기준으로 왼쪽과 오른쪽을 나눠 재귀적으로 다시 함수에 넣어준다.
- 왼쪽의 결과값과, 오른쪽의 결과 값을 현재의 연산자를 이용하여 모두 계산해준다.
- 만약 결과 값 리스트가 없다면 숫자만 남은 것이므로 해당 식을 숫자화 시켜준다.
<전체코드>
import java.util.*;
class Solution {
public List<Integer> diffWaysToCompute(String expression) {
List<Integer> answer = new LinkedList<>();
for(int i = 0 ; i < expression.length() ; i++){
char c = expression.charAt(i);
if(c == '-' || c == '+' || c == '*'){
List<Integer> left = diffWaysToCompute(expression.substring(0, i));
List<Integer> right = diffWaysToCompute(expression.substring(i + 1));
for(Integer l : left){
for(Integer r : right){
answer.add(calculator(l, r, c));
}
}
}
}
if(answer.isEmpty()){
answer.add(Integer.parseInt(expression));
}
return answer;
}
public int calculator(int a, int b, char ex){
if(ex == '-'){
return a - b;
}
if(ex == '+'){
return a + b;
}
if(ex == '*'){
return a * b;
}
return 0;
}
}
'알고리즘 공부 > 완전탐색' 카테고리의 다른 글
[백준] 18428 감시 피하기 (0) | 2021.08.07 |
---|---|
[프로그래머스] 가장 긴 팰린드롬 (0) | 2021.06.08 |
[프로그래머스] 외벽 점검 (0) | 2021.06.04 |
[프로그래머스] 메뉴리뉴얼 (0) | 2021.05.25 |
[프로그래머스] 보석쇼핑 (0) | 2021.05.06 |