[๋ฐฑ์ค(BOJ)] ํ์ ํ๊ธฐ์(1918) C++
๋ฌธ์ : BOJ_1918๋ฒ ํ์ ํ๊ธฐ์
๋ฌธ์ ์ค๋ช
Stack
์ค์ ํ๊ธฐ์์ผ๋ก ์์ ๊ฐ ์ฃผ์ด์ง๋ฉด ์ด๊ฒ์ ํ์ ํ๊ธฐ์์ผ๋ก ๋ฐ๊พธ๋ ๋ฌธ์ ์
๋๋ค.
ํผ์ฐ์ฐ์๋ ์ํ๋ฒณ ๋๋ฌธ์๋ง ๋์ค๋ฉฐ, '-'๊ฐ ๊ฐ์ฅ ์์ ๋์ค๊ฑฐ๋, '*'๊ฐ ์๋ต๋๋ ์
๋ ฅ์ ํ์ฉํ์ง ์์ต๋๋ค.
stack์ ์ํฉ์ ๋ง๊ฒ ํ์ฉํด์ ํ์ด์ผ ํ๋ ๋ฌธ์ ์
๋๋ค.
Solution
์ ์ฒด ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ๊ณ ์๋์ ๊ฐ์ ๊ท์น์ผ๋ก ์ํํฉ๋๋ค.
- ํผ์ฐ์ฌ์๋ ๋ฌด์กฐ๊ฑด ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
- '('๊ฐ ๋์ค๋ฉด stack์ push ํ๋ค.
- ')'๊ฐ ๋์ค๋ฉด '('๊ฐ ๋์ฌ ๋๊น์ง stack์ ๋น์ฐ๋ฉฐ ์ถ๋ ฅํ ๋ค, ๋ง์ง๋ง '('๋ ์ถ๋ ฅ ์์ด pop ํด์ค๋ค.
- ์ฐ์ฐ์๊ฐ ๋์์ ๋ stack์ top์ ์์ ๋ณด๋ค ์ฐ์ ์์๊ฐ ๊ฐ๊ฑฐ๋ ๋์ ์ฐ์ฐ์๊ฐ ์์ผ๋ฉด ๊ทธ ์ฐ์ฐ์๋ฅผ pop ํด์ฃผ๊ณ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
- ์ฐ์ ์์๊ฐ ๊ฐ๊ฑฐ๋ ๋์ ์ฐ์ฐ์๊ฐ ๋์ค์ง ์๊ณ '('๋ stack์ด ๋น ๋๊น์ง ๊ณ์ pop ํด์ฃผ๋ค๊ฐ ๋ง๋๊ฒ ๋๋ฉด push ํด์ค๋ค.
Description
(int i = 0; str[i] != '\0'; i++)
๋ก ์ ์ฒด ๋ฌธ์์ด์ ์ํํ์ต๋๋ค.
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
stack<char> s;
int main(void) {
char str[101];
cin >> str;
stack<char> s;
for (int i = 0; str[i] != '\0'; i++) {
char value=str[i];
if (value <= 'Z' && 'A' <= value) cout << value;
else if (value == '(') s.push(value);
else if (value == ')') {
while (s.top() != '(') {
cout << s.top();
s.pop();
}
s.pop();
}
else if (s.empty()) s.push(value);
else {
while (!s.empty()) {
if (s.top() == '(') {
s.push(value);
break;
}
else if (value == '+' || value == '-') {
cout << s.top();
s.pop();
continue;
}
else if (value == '*' || value == '/') {
if (s.top() == '*' || s.top() == '/') {
cout << s.top();
s.pop();
continue;
}
else {
s.push(value);
break;
}
}
}
if (s.empty()) s.push(value);
}
}
while (!s.empty()) {
cout << s.top();
s.pop();
}
cout << '\n';
return 0;
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ์ค๋์ฟ (2580) (0) | 2022.03.10 |
---|---|
[BOJ] ๋ฐฑ์กฐ์ ํธ์(3197) (0) | 2022.03.10 |
[BOJ] ํ์ด์ ๋ฐํด(2840) (0) | 2022.03.10 |
[BOJ] ํ์ ํ๋ ํ(1021) (0) | 2022.03.10 |
[BOJ] ์ค๋ฅด๋ง ์(11057) (0) | 2022.03.09 |