[λ°±μ€(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 |