티스토리 뷰

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
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
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
글 보관함