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

J-Keonho·2020년 9월 8일
0

해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.

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

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

풀이 : 문자열과 연산을 분리하여 연산의 우선순위의 경우에 맞춰 계산 후 최대값을 찾는다.

import java.util.*;
class Solution {
    public long solution(String expression) {
       String [] arr = {"*+-", "*-+", "-+*", "-*+", "+-*", "+*-"};
		ArrayList <Long> num = new ArrayList<Long>();
		ArrayList <Character> oper = new ArrayList<Character>();
		String s = "";
		for (int i = 0; i < expression.length(); i++) {
			char ch = expression.charAt(i);
			if(ch == '-' || ch == '+' || ch == '*') {
				num.add(Long.parseLong(s));
				s = "";
				oper.add(ch);
			}else 
				s += String.valueOf(ch);
		}
		num.add(Long.parseLong(s));
		long answer = 0;
		for (int i = 0; i < arr.length; i++) {
			ArrayList <Long> numclone = (ArrayList <Long>)num.clone();
			ArrayList <Character> operclone = (ArrayList <Character>)oper.clone();
			for (int j = 0; j < arr[i].length(); j++) {
				char ch = arr[i].charAt(j);
				
				while(operclone.contains(ch)) {
					
					int idx = operclone.indexOf(ch);
					long result = 0;
					switch (ch) {
					case '+':
						result = numclone.get(idx) + numclone.get(idx+1);
						break;
					case '-':
						result = numclone.get(idx) - numclone.get(idx+1);
						break;
					case '*':
						result = numclone.get(idx) * numclone.get(idx+1);
						break;
					}
					operclone.remove(idx);
					numclone.remove(idx);
					numclone.remove(idx);
					numclone.add(idx, result);
				}
			}
			if(answer < Math.abs(numclone.get(0))) answer = Math.abs(numclone.get(0));
		}
        return answer;
    }
}
profile
안녕하세요.

0개의 댓글