후위연산식 문제 (Stack)

import java.util.Scanner;
import java.util.Stack;

public class Main {
	
	public int solution(String str) {
		int ans = 0;
		
		Stack<Integer> stk = new Stack<>();
		for(char x : str.toCharArray()) {
			if(Character.isDigit(x)) stk.push(x-48);
			else {
				int rt = stk.pop();
				int lt = stk.pop();
				
				if(x == '+') stk.push((lt) + (rt));
				else if(x == '-') stk.push((lt) - (rt));
				else if(x == '*') stk.push((lt) * (rt));
				else if(x == '/') stk.push((lt) / (rt));
			}
		}
		ans = stk.get(0);
		return ans;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		
		String str = kb.next();
		System.out.println(T.solution(str));
	}
}
  • 후위연산식 str의 앞부터 for-each 반복문

 

  • Character x 가 숫자일 경우
    • x-48 (Stack<Integer> stk 이므로) 하여 push

 

  • Character x 가 숫자가 아닐 경우
    • 두 개를 pop 해 순서대로 rt, lt에 할당
    • 사칙연산 기호 x 에 맞게 연산

'Solved > 코딩테스트' 카테고리의 다른 글

섬나라 아일랜드 (BFS, DFS)  (0) 2023.03.30
토마토(BFS 활용)  (0) 2023.03.29
임시반장 정하기 문제  (0) 2023.03.17
Least Recently Used  (0) 2023.03.14
쇠막대기 절단 문제 (Stack)  (0) 2023.03.13