본문 바로가기
알고리즘/SWEA

[Java] SWEA 1222번 계산기1

by 컴공맨 2021. 2. 17.
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

스택을 사용해서 후위표현식으로 바꾸어주고 계산을 진행하여 해결했습니다.


코드

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

public class Solution {
	public static int N;
	public static String input, formula;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder("");
		
		for (int tc = 1; tc <= 10; ++tc) {
			N = Integer.parseInt(br.readLine());
			input = br.readLine();
			
			makePost();
			
			sb.append("#").append(tc).append(" ").append(calc()).append("\n");
		}
		
		System.out.println(sb);
	}
	
	public static void makePost() {
		Stack<Character> stk = new Stack<Character>();
		StringBuilder sb = new StringBuilder();
		HashMap<Character, Integer> priority = new HashMap<Character, Integer>();
		priority.put('+', 0);
		
		for (int i = 0; i < input.length(); ++i) {
			char cur = input.charAt(i);
			if (cur >= '0' && cur <= '9') {
				sb.append(cur);
				continue;
			}
			
			while (!stk.isEmpty() && priority.get(stk.peek()) >= priority.get(cur)) {
				sb.append(stk.pop());
			}
			
			stk.add(cur);
		}
		
		while (!stk.isEmpty()) {
			sb.append(stk.pop());
		}
		
		formula = sb.toString();
	}
	
	public static int calc() {
		Stack<Integer> stk = new Stack<Integer>();
		
		for (int i = 0; i < formula.length(); ++i) {
			char cur = formula.charAt(i);
			
			if (cur >= '0' && cur <= '9') {
				stk.add(cur - '0');
				continue;
			}
			
			if (cur == '+') {
				int op2 = stk.pop();
				int op1 = stk.pop();
				
				stk.add(op1 + op2);
			}
		}
		
		return stk.pop();
	}
}

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com