본문 바로가기

Programmers/Level2

[카카오 인턴] 수식 최대화

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.util.*;
class Solution {
    public long solution(String expression) {
        long answer = 0;
        char[] formula = { '*''+''-' };
        int[][] order = { { 012 }, { 021 }, { 102 }, { 120 }, { 201 }, { 210 } };
        List<String> list = new ArrayList<String>();
        String[] nums = expression.split("\\W");
        String[] formulas = expression.split("\\d+");
 
        // list에 값 추가
        list.add(nums[0]);
        for (int i = 1; i < formulas.length; i++) {
            list.add(formulas[i]);
            list.add(nums[i]);
        }
 
        for (int i = 0; i < 6; i++) {
            List<String> tmp = new ArrayList<String>(list);
            long res = 0;
            
            // 우선 순위대로 계산 
            for (int j = 0; j < 3; j++) {
                char c = formula[order[i][j]];
                for (int k = 1; k < tmp.size(); k++) {
                    char getC = tmp.get(k).charAt(0);
                    if (getC == c) {
                        long a = Long.parseLong(tmp.get(k - 1));
                        long b = Long.parseLong(tmp.get(k + 1));
                        if (c == '+') {
                            res = a + b;
                        } else if (c == '-') {
                            res = a - b;
                        } else {
                            res = a * b;
                        }
                        // 계산 후 값 수정
                        tmp.remove(k - 1);
                        tmp.remove(k - 1);
                        tmp.set(k - 1, Long.toString(res));
                        k--;
                    }
                }
            }
            if (answer < Math.abs(res))
                answer = Math.abs(res);
        }
        return answer;
    }
}
cs

연산자의 우선 순위 경우의 수를 모두 나열한 다음 가장 큰 값으로 갱신하였다.

'Programmers > Level2' 카테고리의 다른 글

소수 찾기  (0) 2021.07.19
단체사진 찍기  (0) 2021.07.19
124 나라의 숫자  (0) 2021.07.18
전화번호 목록  (0) 2021.07.16
게임 맵 최단거리  (0) 2021.07.14