-
[프로그래머스] 수식 최대화 (2020 카카오 인턴십)ALGORITHM/PROGRAMMERS 2021. 3. 15. 21:49
programmers.co.kr/learn/courses/30/lessons/67257
2021-03-15
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677import java.util.ArrayList;public class Solution67257 {public static long answer;public static int[] order;public static boolean[] vtd;public static ArrayList<String> list;public static String[] dir = {"*", "+", "-"};public static void solve(int[] order) {ArrayList<String> temp = new ArrayList<>(list);for (int value : order) { // 만들 수 있는 기호의 조합 순서대로for (int j = 0; j < temp.size(); j++) {if (temp.get(j).equals(dir[value])) { // 우선순위에 있는 기호를 만나게 되면 기호 기준 전과 후의 값으로 계산long tmp = 0;switch (dir[value]) {case "*":tmp = Long.parseLong(temp.get(j - 1)) * Long.parseLong(temp.get(j + 1));break;case "-":tmp = Long.parseLong(temp.get(j - 1)) - Long.parseLong(temp.get(j + 1));break;case "+":tmp = Long.parseLong(temp.get(j - 1)) + Long.parseLong(temp.get(j + 1));break;}for (int k = 0; k < 3; k++) {temp.remove(j - 1);}temp.add(j - 1, String.valueOf(tmp));j = 0;}}}answer = Math.max(answer, Math.abs(Long.parseLong(temp.get(0))));}public static void comb(int cnt) { // 기호로 만들어 낼 수 있는 모든 조합 (3!)if(cnt == dir.length) {solve(order);return;}for(int i = 0; i < dir.length; i++) {if(!vtd[i]) {vtd[i] = true;order[cnt] = i;comb(cnt+1);vtd[i] = false;}}}public static long solution(String expression) {answer = 0;list = new ArrayList<>();String str = "";vtd = new boolean[3];for(int i = 0; i < expression.length(); i++) { // 숫자와 기호 분리해서 arraylist에 추if(expression.charAt(i) == '*' || expression.charAt(i) == '+' || expression.charAt(i) == '-') {list.add(str);list.add(String.valueOf(expression.charAt(i)));str = "";} else {str += expression.charAt(i);}}order = new int[3];list.add(str);comb(0);return answer;}public static void main(String[] args) {String s = "100-200*300-500+20";System.out.println(solution(s));}}cs #문제풀이
단순히 만들 수 있는 기호의 우선순위 조합을 이용해서 그 경우의 수에 맞추서 계산 해보면 되는 문제이다.
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 네트워크 (0) 2021.04.15 [프로그래머스] 매칭 점수 (2019 KAKAO BLIND RECRUITMENT) (0) 2021.03.29 [프로그래머스] 튜플 (2019 카카오 개발자 겨울 인턴십) (0) 2021.03.07 [프로그래머스] 오픈채팅방 (2019 KAKAO BLIND RECRUITMENT) (0) 2021.03.05 [프로그래머스] 문자열 압축 (2020 KAKAO BLIND RECRUITMENT) (0) 2021.03.05