๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ž๋ฃŒ๊ตฌ์กฐ

[SWEA] 1223๋ฒˆ ๊ณ„์‚ฐ๊ธฐ2 (Java)

์ ์ด 2021. 8. 20. 13:06
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

SWEA(SW Expert Academy) 1223๋ฒˆ ๊ณ„์‚ฐ๊ธฐ2 [D4]

ํ’€์ด

์Šคํƒ์„ ์ด์šฉํ•˜์—ฌ ํ›„์œ„ํ‘œ๊ธฐ์‹์„ ์ž‘์„ฑ/๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ

 

ํ›„์œ„ํ‘œ๊ธฐ์‹ ๋ณ€ํ™˜

๋งŒ์•ฝ ์ˆซ์ž์ผ ๊ฒฝ์šฐ, ๋ฐ”๋กœ ์ถœ๋ ฅ(์—ฌ๊ธฐ์—๋Š” ํ›„์œ„ํ‘œ๊ธฐ์‹ ๋ฌธ์ž์—ดcarr์— ์ €์žฅ)ํ•˜๊ณ  

์—ฐ์‚ฐ์ž์ผ ๊ฒฝ์šฐ, ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์Šคํƒ์— pop/push.

์Šคํƒ์—์„œ ์ž์‹ ๋ณด๋‹ค ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ์—ฐ์‚ฐ์ž๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ณ„์† popํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

์ฆ‰, ์ž์‹ ๋ณด๋‹ค ๋†’๊ฑฐ๋‚˜ ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„ ์—ฐ์‚ฐ์ž๋ฅผ ๋ชจ๋‘ pop

ํ˜„์žฌ ๋ฌธ์ œ์—์„œ๋Š” +, *๋ฐ–์— ์—†์œผ๋ฏ€๋กœ +๋Š” ์Šคํƒ์— ์žˆ๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์ž๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , *๋Š” peek()๊ฐ’์ด *์ผ ๋•Œ ์ถœ๋ ฅํ•œ๋‹ค.

์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ฅธ ์—ฐ์‚ฐ์ž ์ถœ๋ ฅ ํ›„, ์ž๊ธฐ ์ž์‹ ์„ push

 

ํ›„์œ„ํ‘œ๊ธฐ์‹ ๊ณ„์‚ฐ

๋ฌธ์ž์—ด๋ฐฐ์—ด(carr)์„ ์ˆœํšŒํ•˜๋ฉฐ

์ˆซ์ž์ผ ๊ฒฝ์šฐ stack์—(์ด์ „๊ณผ ๋‹ค๋ฅธ ์Šคํƒ ์‚ฌ์šฉ) pushํ•˜๊ณ  ์—ฐ์‚ฐ์ž์ผ ๊ฒฝ์šฐ, ํ˜„์žฌ ์Šคํƒ์—์„œ ์ˆซ์ž ๋‘๊ฐœ๋ฅผ popํ•˜์—ฌ ์—ฐ์‚ฐ.

์—ฐ์‚ฐ ํ›„, ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ push.

๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ์ˆœํšŒ๋ฅผ ์™„๋ฃŒํ•˜๋ฉด, ์Šคํƒ์—๋Š” ๊ฒฐ๊ณผ๊ฐ’ ๋‹จ ํ•˜๋‚˜๋งŒ์ด ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ popํ•˜์—ฌ ๊ฒฐ๊ณผ ์ถœ๋ ฅ.

 

์ฝ”๋“œ

package stack;

import java.io.*;
import java.util.*;

public class Solution_d4_1223_๊ณ„์‚ฐ๊ธฐ2 {
	static Stack<Character> stack ;
	static Stack<Integer> res ;
	static int n;
	static char[] carr;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		for(int T = 1 ; T<=10 ; T++) {
			n = Integer.parseInt(br.readLine());
			carr = new char[n];
			stack = new Stack<>();
			res = new Stack<>();
			toPostfix(br.readLine());
			sb.append("#").append(T).append(" ").append(Cal()).append("\n");			
		}
		System.out.println(sb.toString());
	}
    //ํ›„์œ„ํ‘œ๊ธฐ์‹ ๊ณ„์‚ฐ
	private static int Cal() {
		for(int i =0 ; i < n ; i++) {
			if(carr[i] == '+') res.push(res.pop()+res.pop());
			else if(carr[i] == '*') res.push(res.pop()*res.pop());
			else res.push(carr[i]-'0');
		}
		return res.pop();
	}
    //ํ›„์œ„ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ณ€๊ฒฝ
	private static void toPostfix(String str) {
		int idx =0;
		for(int i =0 ; i < n ; i++) {
			if(str.charAt(i)=='+' || str.charAt(i)=='*') {
				while(!stack.isEmpty() && canPop(str.charAt(i))) {
					carr[idx++] = stack.pop(); 
				}
				stack.push(str.charAt(i));
			}
			else carr[idx++] = str.charAt(i);
		}
		while(!stack.isEmpty()) carr[idx++] = stack.pop();
	}
    //์šฐ์„ ์ˆœ์œ„ ํ™•์ธ
	private static boolean canPop(char c) {	
		if(c == '+') return true;
		if(stack.peek() == '*') return true;
		else return false;
	}
}
๋ฐ˜์‘ํ˜•