티스토리 뷰
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/67257
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
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 |