티스토리 뷰

728x90

풀이 및 소스코드

 

후위표기식으로 바꿔 계산하라고 나와있지만

*+ 밖에 없기때문에 굳이 그렇게 안해도 되겠다고 생각했다.

먼저 입력받은 계산식 문자열을 하나하나 스택에 넣되, *가 들어오면 스택의 최상위 숫자를 pop한 후 문자열의 현재 인덱스+1 번째의 것과 곱해서 스택에 넣어준다. 

그리고 다음으로는 스택에 요소가 하나 남을 때 까지 pop하고 더하고 push 하고를 반복해주면 된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Solution {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		for(int t=1;t<=10;t++) {
			int n = Integer.parseInt(br.readLine());
			String s = br.readLine();
			Stack<Integer> stack = new Stack<>();
			int i=0;
			while (i<n) { //곱하기 계산
				if(s.charAt(i)=='*') {
					stack.push(stack.pop()*(s.charAt(i+1)-'0'));
					i = i+2;
				}
				else {
					stack.push(s.charAt(i++)-'0');
				}
//				for(int j=0;j<stack.size();j++) {
//					System.out.print(stack.get(j));
//				}
//				System.out.println();
			}
			int tmp = stack.pop();
			while(!stack.isEmpty()) { //더하기 계산
				if(stack.peek()==('+'-'0')) {
					stack.pop();
					stack.push(stack.pop()+tmp);
				}else {
					tmp = stack.pop();
				}
				if(stack.size() == 1) break;
			}
			
			sb.append("#").append(t).append(" ").append(stack.pop()).append("\n");
		}
		System.out.println(sb);
	}

}
반응형