hades

[Baekjoon] 1918๋ฒˆ: ํ›„์œ„ ํ‘œ๊ธฐ์‹ ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 1918๋ฒˆ: ํ›„์œ„ ํ‘œ๊ธฐ์‹

hades1 2024. 8. 8. 11:05

๐Ÿฅ… ๋ฌธ์ œ

https://www.acmicpc.net/problem/1918

 

๐Ÿ” ์„ค๊ณ„

ํ›„์œ„ ํ‘œ๊ธฐ์‹์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ๋Š” ์Šคํƒ์„ ์‚ฌ์šฉํ•œ๋‹ค. A+B-C์˜ ๊ฒฝ์šฐ, ABC-+ ์ธ๋ฐ, ์ถœ๋ ฅ ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด, ๋จผ์ € ๋“ค์–ด์˜จ +๊ฐ€ ๋‚˜์ค‘์— ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์•ŒํŒŒ๋ฒณ์ด๋ฉด, ๊ทธ๋ƒฅ ์ถœ๋ ฅํ•˜์—ฌ ์Šคํƒ์—๋Š” ๊ด„ํ˜ธ์™€ ์—ฐ์‚ฐ์ž๋งŒ ๋‹ด๊ธฐ๊ฒŒ ํ•œ๋‹ค.

 

๊ด„ํ˜ธ ๋‚ด๋ถ€์˜ ์‹์„ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด, ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ '('์ด๋ฉด ์Šคํƒ์— ๊ทธ๋ƒฅ ์ถ”๊ฐ€ํ•˜๊ณ , ')'์ด๋ฉด, ๊ด„ํ˜ธ ๋‚ด๋ถ€์—์„œ ์•„์ง ์ถœ๋ ฅํ•˜์ง€ ์•Š์€ ์—ฐ์‚ฐ์ž๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , '('๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๊ด„ํ˜ธ ๋‚ด๋ถ€์˜ ์‹์„ ๋๋‚ธ๋‹ค.

 

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

 

๋งˆ์ง€๋ง‰์— ์Šคํƒ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์—ฐ์‚ฐ์ž๊ฐ€ '*' ๋˜๋Š” '/'์ด๋ฉด,  ์‹ ๋‚ด๋ถ€์—์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์œผ๋ฏ€๋กœ,  '*' ๋˜๋Š” '/'๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

๋งˆ์ง€๋ง‰์— ์Šคํƒ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์—ฐ์‚ฐ์ž๊ฐ€ '+' ๋˜๋Š” '-'์ด๋ฉด,  ์‹ ๋‚ด๋ถ€์—์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์œผ๋ฏ€๋กœ, ์Šคํƒ์— ์žˆ๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์ž๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

string eq;
stack<char> s;

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> eq;
	for (int i = 0; i < eq.length(); i++) {
		if (eq[i] >= 'A' && eq[i] <= 'Z') {
			cout << eq[i];
		}
		else if (eq[i] == '(') {
			s.push(eq[i]);
		}
		else if (eq[i] == ')') {
			while (!s.empty() && s.top() != '(') {
				cout << s.top();
				s.pop();
			}
			s.pop();
		}
		else if (eq[i] == '*' || eq[i] == '/') {
			while (!s.empty() && (s.top() == '*' || s.top() == '/')) {
				cout << s.top();
				s.pop();
			}
			s.push(eq[i]);
		}
		else if (eq[i] == '+' || eq[i] == '-') {
			while (!s.empty() && (s.top() != '(')) {
				cout << s.top();
				s.pop();
			}
			s.push(eq[i]);
		}
	}
	while (!s.empty()) {
		cout << s.top();
		s.pop();
	}
	
	return 0;
}