Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

csct3434

[level 2] [카카오 인턴] 수식 최대화 - 67257 본문

프로그래머스

[level 2] [카카오 인턴] 수식 최대화 - 67257

csct3434 2024. 2. 29. 03:25

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.LinkedList;
import java.util.Stack;

class Solution {

    public long solution(String expression) {
        long answer = 0;

        expression = expression.replace("+", " + ");
        expression = expression.replace("-", " - ");
        expression = expression.replace("*", " * ");

        String[] prioritizedOps = {"+-*", "+*-", "-+*", "-*+", "*-+", "*+-"};

        for (String ops : prioritizedOps) {
            Stack<String> stack = new Stack<>();

            String[] tokens = expression.split(" ");

            for (String op : ops.split("")) {
                int index = 0;

                while (index < tokens.length) {
                    String token = tokens[index];

                    if (token.equals(op)) {
                        String num1 = stack.pop();
                        String num2 = tokens[index + 1];
                        stack.push(String.valueOf(calc(num1, op, num2)));
                        index += 2;
                        continue;
                    }

                    stack.push(tokens[index++]);
                }

                LinkedList<String> temp = new LinkedList<>();
                while (!stack.isEmpty()) {
                    temp.push(stack.pop());
                }
                tokens = temp.toArray(new String[0]);
            }

            answer = Math.max(Math.abs(Long.parseLong(tokens[0])), answer);
        }

        return answer;
    }

    private long calc(String num1, String op, String num2) {
        if (op.equals("*")) {
            return Long.parseLong(num1) * Long.parseLong(num2);
        }

        if (op.equals("+")) {
            return Long.parseLong(num1) + Long.parseLong(num2);
        }

        return Long.parseLong(num1) - Long.parseLong(num2);
    }
}

'프로그래머스' 카테고리의 다른 글

[level 2] 쿼드압축 후 개수 세기 - 68936  (0) 2024.02.29
[level 2] 삼각 달팽이 - 68645  (0) 2024.02.29
[level 2] 튜플 - 64065  (0) 2024.02.29
[level 2] 괄호 변환 - 60058  (0) 2024.02.29
[level 2] 문자열 압축 - 60057  (0) 2024.02.29