티스토리 뷰
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/67257
2020 카카오 인턴십 Level 2 문제다.
어려운 문제는 아니었지만 계산하는 과정에서 연산자와 피연산자를 삭제하는게 너무 헷갈렸다.
연산자 우선순위의 모든 경우는 6개의 경우만 존재하기 때문에 이를 배열에 저장하고
우선순위에 맞게 값을 계산하여 최대값을 찾는다.
수식이 문자열 형태로 들어오기 때문에
문자열을 하나씩 탐색하여 숫자는 숫자를 저장하는 list에 저장하고,
연산자는 연산자를 저장하는 list에 순서대로 저장했다.
import java.util.List;
import java.util.ArrayList;
class Solution {
static String[] prior = {"+-*", "+*-", "*-+", "*+-", "-+*", "-*+"};
static long ans = Long.MIN_VALUE;
static ArrayList<Long> num = new ArrayList<>();
static ArrayList<Character> oper = new ArrayList<>();
static long solution(String expression) {
StringBuilder sb = new StringBuilder();
for(int i=0;i<expression.length();i++) {
char c = expression.charAt(i);
if(c >= '0' && c <= '9')
sb.append(c);
else {
num.add(Long.parseLong(sb.toString()));
oper.add(c);
sb.setLength(0);
}
}
num.add(Long.parseLong(sb.toString()));
for(int i=0;i<prior.length;i++)
ans = Math.max(ans, calcuteNum(prior[i]));
return ans;
}
static long calcuteNum(String s) {
List<Long> tmpNum = new ArrayList<>(num);
List<Character> tmpOp = new ArrayList<>(oper);
for(char c : s.toCharArray()) {
for(int i=0;i<tmpOp.size();i++) {
if(tmpOp.get(i) == c) {
switch(c) {
case '+':
tmpNum.set(i, tmpNum.get(i) + tmpNum.get(i + 1));
break;
case '*':
tmpNum.set(i, tmpNum.get(i) * tmpNum.get(i + 1));
break;
case '-':
tmpNum.set(i, tmpNum.get(i) - tmpNum.get(i + 1));
break;
}
tmpOp.remove(i);
tmpNum.remove(i + 1);
i--;
}
}
}
return Math.abs(tmpNum.get(0));
}
}
728x90
'algorithm > programmers' 카테고리의 다른 글
[프로그래머스/자바] 경주로 건설 풀이 - 2020 카카오 인턴십 (0) | 2022.11.13 |
---|---|
[프로그래머스/자바] 보석 쇼핑 풀이 - 2020 카카오 인턴십 (0) | 2022.11.13 |
[프로그래머스/자바] 키패드 누르기 풀이 - 2020 카카오 인턴십 (0) | 2022.11.13 |
[프로그래머스/자바] 튜플 풀이 - 2019 카카오 개발자 겨울 인턴십 (0) | 2022.11.13 |
[프로그래머스/자바] 불량 사용자 풀이 - 2019 카카오 개발자 겨울 인턴십 (0) | 2022.11.13 |