[swexpert] 1223. 계산기2 (java, D4)

728x90
반응형

입력이 끝날 때까지 정보를 입력받는다 

BufferedReader의 경우 input이 null이면 끝난다

 

+는 무시하고 숫자를 스택에 계속 넣어주고 *은 스택 타입을 int로 설정했기 때문에 -1로 해서 넣어준다.

숫자를 넣기 전 스택 최상의가 -1(*)라면 숫자를 곱해줘야 하므로 현재 숫자와 스택에서 *이전의 숫자

(pop을 두번 해준다) 를 곱해서 다시 스택에 넣어준다.

 

마지막에 스택에 들어있는 있는 숫자들을 모두 더해주면 된다. 

 

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

public class Solution {
	static int n;
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String input="";
		int tc=0;
		while((input=br.readLine())!=null) {
			char[] c=br.readLine().toCharArray();

			Stack<Integer> stack=new Stack<>();
			for (int i = 0; i < c.length; i++) {
				if(c[i]=='+') {
					continue;
				}
				if(!stack.isEmpty() && stack.peek()==-1) {
					stack.pop();
					int num=stack.pop();
					stack.push(num*(c[i]-'0'));
				}else if(c[i]=='*') {
					stack.push(-1);			
				}else {
					stack.push(c[i]-'0');
				}
				
			}
			int sum=0;
			while(!stack.empty()) {
				sum+=stack.pop();
			}
			System.out.printf("#%d %d\n",tc+1,sum);
			tc+=1;
		}
		
	}
}
728x90
반응형
TAGS.

Comments