Programmers/Lv.2

프로그래머스 Lv.2 - 수식 최대화

junnrecorder 2023. 10. 28. 11:08

https://school.programmers.co.kr/learn/courses/30/lessons/67257

 

프로그래머스

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

programmers.co.kr

1. 우선순위가 다른 각 케이스를 문자열 배열로 생성한다.

2. expression을 split 하여 숫자와 연산자를 리스트에 저장한다.

3. 우선순위가 우선인 연산자를 계산하여 그 연산자가 없어질 때 까지 계산을 한다.

ex) "*+-", 100 + 50 * 30 - 20 이라고 하면, 100 +150 - 20, 250 - 20, 230 순으로 로직을 작성

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
import java.util.*;
 
class Solution {
    public long solution(String expression) {
        long answer = 0;
        
        String[] calArr = {"*+-""*-+""+*-""+-*""-*+""-+*"};
        String[] tokens = expression.replace("+""!+!").replace("*""!*!").replace("-""!-!").split("!");
        
        for(String cal : calArr) {
            List<String> tokenList = new ArrayList<>();
        
            for(String token : tokens) tokenList.add(token);
            
            for(int i=0; i<cal.length(); i++) {
 
                int idx = tokenList.indexOf(String.valueOf(cal.charAt(i)));
                
                while(idx != -1) {
                    long num1 = Long.valueOf(tokenList.get(idx - 1));
                    long num2 = Long.valueOf(tokenList.get(idx + 1));
                    
                    tokenList.remove(idx+1);
                    tokenList.remove(idx);
                    tokenList.remove(idx-1);
                    
                    if(cal.charAt(i) == '*') {
                        tokenList.add(idx-1String.valueOf(num1 * num2));
                    } else if(cal.charAt(i) == '+') {
                        tokenList.add(idx-1String.valueOf(num1 + num2));
                    } else if(cal.charAt(i) == '-') {
                        tokenList.add(idx-1String.valueOf(num1 - num2));
                    }
                    
                    idx = tokenList.indexOf(String.valueOf(cal.charAt(i)));
                }
            }
            
            long num = Math.abs(Long.valueOf(tokenList.get(0)));
            
            if(answer < num) answer = num;
        }
        
        return answer;
    }
}
cs