백준 풀이 - 스택의 활용
문제리뷰
10799 쇠막대기
2504 괄호의 값 : 숫자를 스택에 넣어서 구현함. 아스키코드 고려해서 음수를 넣어야 함.
=> 정답 코드를 보니 훨씬 간단하지만 내가 떠올릴 수 있을지는 잘 모르겠음.
10799 쇠막대기
#include <bits/stdc++.h>
using namespace std;
int result;
string str;
stack<char> S;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> str;
int stick = 0;
char prev = str[0];
for(char c : str) {
if(S.empty() || c == '(') S.push(c);
else if (c == ')' && c == prev) {
S.pop();
stick++;
}
else if (c == ')' && c != prev) {
S.pop();
result += S.size() + stick;
stick = 0;
}
prev = c;
}
cout << result + stick;
}
2504 괄호의 값
#include <bits/stdc++.h>
using namespace std;
bool flag = true;
int result = 0;
string str;
stack<int> S;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> str;
for(int c : str) {
int num = 0;
if(c == '(' || c == '[') S.push(c);
else if (c == ')') {
while(!S.empty() && S.top() != '(') {
int temp = S.top();
if(temp == '(') break;
if(temp == '[') {
flag = false;
break;
}
S.pop();
num += temp;
}
if(S.empty() || !flag){
flag = false;
break;
}
S.pop();
if(num == 0) num = -1;
S.push(num * 2);
}
else if (c == ']') {
while(!S.empty() && S.top() != '[') {
int temp = S.top();
if(temp == '[') break;
if(temp == '(') {
flag = false;
break;
}
S.pop();
num += temp;
}
if(S.empty() || !flag){
flag = false;
break;
}
S.pop();
if(num == 0) num = -1;
S.push(num * 3);
}
else {
flag = false;
break;
}
}
while(flag && S.size()) {
if(S.top() == '(' || S.top() == '[') {
result = 0;
break;
}
result += S.top();
S.pop();
}
cout << -result;
}
'Problem Solving > 문제풀이' 카테고리의 다른 글
기타:: 230116 일기 (0) | 2023.01.16 |
---|---|
기타:: 230115 일기 (0) | 2023.01.15 |
기타:: 230106 일기 (0) | 2023.01.07 |
기타:: 230105 일기 (0) | 2023.01.05 |
기타:: 1104 일기 (0) | 2022.11.04 |