๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1918_ํ›„์œ„ ํ‘œ๊ธฐ์‹

๋ฟŒ์•ผ._. 2024. 2. 15. 14:32

Gold II

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/1918)

< ํ›„์œ„ ํ‘œ๊ธฐ์‹ >

 

๋ฌธ์ œ ํ’€์ด 

 

์šฐ์„ ์ˆœ์œ„๊ฐ€ (๊ด„ํ˜ธ), (*,/), (+,-) ์ˆœ์ด๋ฏ€๋กœ ์ˆœ์„œ๋Œ€๋กœ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

 

 

 my solution (Java)

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

public class _1918_ { // ํ›„์œ„ ํ‘œ๊ธฐ์‹
	static ArrayList<String> arr;

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

		String str = bf.readLine();

		Stack<String> stack = new Stack<>();
		arr = new ArrayList<>();

		// (, )
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i) == ')') {
				while (!stack.peek().equals("(")) {
					arr.add(stack.pop());
				}
				checkPriority("*", "/");
				checkPriority("+", "-");

				stack.pop();
				stack.add(arr.get(0));
				arr.clear();
			} else {
				stack.add(Character.toString(str.charAt(i)));
			}
		}

		// *, /
		init(stack);
		checkPriority("*", "/");

		// +, -
		checkPriority("+", "-");

		System.out.println(arr.get(0));
	}

	private static void init(Stack<String> stack) {
		arr.clear();
		while (!stack.isEmpty()) {
			arr.add(stack.pop());
		}
	}

	private static void checkPriority(String op1, String op2) {
		Stack<String> stack2 = new Stack<>();
		for (int i = arr.size() - 1; i >= 0; i--) {
			String temp = arr.get(i);
			if (arr.get(i).equals(op1) || arr.get(i).equals(op2)) {
				temp = stack2.pop();
				temp += arr.get(i - 1);
				temp += arr.get(i);
				i -= 1;
			}
			stack2.add(temp);
		}
		init(stack2);
	}
}
๋ณ€์ˆ˜)
str : ์ค‘์œ„ ํ‘œ๊ธฐ์‹
stack : Stack <String>
arr : ArrayList <String>

 

์ค‘์œ„ ํ‘œ๊ธฐ์‹์„ ์ž…๋ ฅ๋ฐ›์€ ํ›„ ๊ด„ํ˜ธ, (*,/), (+,-) ์ˆœ์œผ๋กœ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

 

์ค‘์œ„ ํ‘œ๊ธฐ์‹์„ ์ˆœํ™˜ํ•˜๋ฉด์„œ stack์— ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค. ๋งŒ์•ฝ ๊ฐ’์ด ')' ๋ผ๋ฉด ๊ด„ํ˜ธ ์•ˆ์˜ ๊ฐ’์„ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๋”ฐ๋ฅธ๋‹ค.

1) '('์„ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ stack์—์„œ pop ํ•œ ๊ฐ’์„ ArrayList์— ์ €์žฅ

2) ๊ด„ํ˜ธ ์•ˆ์— ๊ฐ’์ด ArrayList์— ์ €์žฅ๋œ ๊ฒƒ์ด๋ฏ€๋กœ checkPriority ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด *, / ์—ฐ์‚ฐ์ž๋ฅผ ๋จผ์ € ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๊ต์ฒด

3) checkPriority ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด +, - ์—ฐ์‚ฐ์ž๋ฅผ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๊ต์ฒด

4) stack์—์„œ '(' ์ œ๊ฑฐ ํ›„ ์œ„์—์„œ ๊ตฌํ•œ ํ›„์œ„ ํ‘œ๊ธฐ์‹์„ stack์— ์ถ”๊ฐ€

5) ๋‹ค์Œ ์ž‘์—…์„ ์œ„ํ•ด ArrayList ์ดˆ๊ธฐํ™”

 

๊ด„ํ˜ธ๋ฅผ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๊ณ ์นœ ํ›„ *, /๋ฅผ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๋”ฐ๋ฅธ๋‹ค.

1) init ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด stack์— ์žˆ๋Š” ๊ฐ’์„ ArrayList์— ์ €์žฅ

2) checkPriority ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด *, / ์—ฐ์‚ฐ์ž๋ฅผ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๊ต์ฒด

 

๋งˆ์ง€๋ง‰์œผ๋กœ +,-๋ฅผ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๋”ฐ๋ฅธ๋‹ค.

1) init ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด stack์— ์žˆ๋Š” ๊ฐ’์„ ArrayList์— ์ €์žฅ

2) checkPriority ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด +,- ์—ฐ์‚ฐ์ž๋ฅผ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๊ต์ฒด

 

ArrayList์— ์žˆ๋Š” ๊ฐ’์ด ์ตœ์ข… ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ฐ”๋€ ์‹ ์ด๋ฏ€๋กœ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

init(Stack <String> stack)

stack์— ์žˆ๋Š” ๊ฐ’์„ pop ํ•ด์„œ ArrayList์— ์ €์žฅ

 

checkPriority(String op1, String op2)

๋จผ์ €, ์ƒˆ๋กœ์šด stack์„ ์„ ์–ธํ•œ๋‹ค.

ArrayList์—๋Š” ์›๋ž˜ ์‹๊ณผ ๋ฐ˜๋Œ€๋กœ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ArrayList๋ฅผ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ˆœํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ ๊ฐ’์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ ์—ฐ์‚ฐ์ž์™€ ๊ฐ™๋‹ค๋ฉด stack์—์„œ ํ”ผ์—ฐ์‚ฐ์ž 1๊ฐœ, ์—ฐ์‚ฐ์ž, ArrayList์˜ ๋‹ค์Œ ๊ฐ’์ธ ํ”ผ์—ฐ์‚ฐ์ž 1๊ฐœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค์–ด stack์— ์ €์žฅํ•œ๋‹ค. ๊ฐ’์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ๋ฐ”๋กœ stack์— ์ €์žฅํ•œ๋‹ค. 

๋ชจ๋“  ์ˆœํ™˜์„ ๋งˆ์นœ ๋’ค init ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด stack์˜ ๊ฐ’์„ ArrayList๋กœ ์˜ฎ๊ธด๋‹ค.