문제
https://www.acmicpc.net/problem/2257
접근 방법
괄호로 무언가를 계산하는 문제의 해결방법 중에 하나는 스택을 이용하는 것이다.
int를 원소로 하는 스택을 선언하여 문제를 접근하였다.
H, C, O일 경우는 1, 12, 16을 push 하였다.
'('가 입력으로 올 때에는 그냥 push를 하면 '('의 아스키코드인 40이 push가 되기 때문에 오류가 생길 수 있어 사용될 일이 없는 값인 -1로 push를 하였다.
')'가 입력으로 올 때는 '('가 나올 때까지 모든 값들을 더하고 그 값을 다시 스택에 push 해주었다.
2 ~ 9까지의 값이 올 경우는 스택의 top에 값을 곱하여 다시 push를 해주었다.
최종적으로 스택에 push 되어있는 모든 값들을 더하여 답을 구하였다.
코드
#include <iostream>
#include <string>
#include <stack>
using namespace std;
string str;
int ans, temp;
stack<int> st;
int main() {
cin >> str;
for (int i = 0; i < str.size(); i++) {
if (str[i] == '(') {
st.push(-1);
}
else if (str[i] == 'H') {
st.push(1);
}
else if (str[i] == 'C') {
st.push(12);
}
else if (str[i] == 'O') {
st.push(16);
}
else if (str[i] >= '2' && str[i] <= '9') {
temp = st.top() * (str[i] - '0');
st.pop();
st.push(temp);
}
else if (str[i] == ')') {
int num = 0;
while (st.top() != -1) {
num += st.top();
st.pop();
}
st.pop();
st.push(num);
}
}
while (!st.empty()) {
ans += st.top();
st.pop();
}
cout << ans << '\n';
}
'백준' 카테고리의 다른 글
[백준] C++ 1389번 케빈 베이컨의 6단계 법칙 (0) | 2023.02.12 |
---|---|
[백준] C++ 1260번 DFS와 BFS (0) | 2023.02.08 |
[백준] C++ 1074번 Z (0) | 2023.02.03 |
[백준] C++ 17219번 비밀번호 찾기 (0) | 2023.02.02 |
[백준] C++ 1620번 나는야 포켓몬 마스터 이다솜 (1) | 2023.02.01 |