후위식 연산(postfix)

Seungmin Lim·2022년 2월 11일
0

코딩문제연습

목록 보기
42/63

문제

나의풀이

import java.util.*;

class Main {
	public int solution(String str) {
			int answer = 0;
			Stack<Integer> stack = new Stack<>();
			for(char x : str.toCharArray()){
				if(Character.isDigit(x))stack.push(Integer.parseInt(Character.toString(x)));
				else {
					int a = stack.pop();
					int b = stack.pop();
					if(x == '+') stack.push(a+b);
					else if(x == '-') stack.push(b-a);
					else if(x == '*') stack.push(a*b);
					else if(x == '/') stack.push(b/a);
				}
			}
			answer = stack.get(0);
			return answer;
	}

		    
	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
		System.out.println(T.solution(str));
	}
	
}

풀이과정

후위식연산을 어떻게 표현하는지 이해하는게 좀 어려웠다...
숫자는 모두 stack에 넣고
연산자를 만나면 숫자를 두 개 pop시켜서
나중에나온값(b) | 연산자(+,-,*,/) | 먼저 나온값(a)
식을 만들어 계산을하면된다.
그 계산결과는 stack에 push돼야한다.
이 과정을 쭉 거치면 최종적으로 stack에는 최종 연산결과값만이 남는다.

핵심키워드

숫자판별 Character.isdigit 메소드를 잊지말자!

0개의 댓글