SMALL
안녕하세요 오늘은 stack을 이용하여 문제를 풀어보도록 하겠습니다.
전략:
1. char 타입으로 stack을 선언해줍니다.
2. 모든 입력을 getline으로 받아서 한줄씩 받을 수 있도록 한다. 만약 들어온 입력이 "."이면 while문을 끝낸다.
3. 들어온 문자열의 길이만큼 반복하는 for문을 만들어서 각 문자가 '('인지, '['인지등등 판단한다.
4. 만약 (이거나 [이면 stack에 push해주고, 만약 )이면 stack이 비어있는지 확인하고, 또는 stack의 맨 위가 (이면 bool타입의 result에 false를 대입해주고, for문을 break 해준다. 그게 아니라면 result에 true를 대입하고 stack의 맨 위를 pop으로 없앤다. ]도 마찬가지로 처리해준다.
코드:
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
while(1){
stack<char> st;
string s;
getline(cin, s);
bool result = true;
if(s =="."){
break;
}
for(int i = 0; i<s.length(); i++){
int x = s[i];
if(x =='(' or x=='['){
st.push(x);
}
else if(x==')'){
if(st.empty()or st.top() != '('){
result = false;
break;
}
else{
result= true;
st.pop();
}
continue;
}
else if(x==']'){
if(st.empty() or st.top() != '['){
result = false;
break;
}
else{
result = true;
st.pop();
}
}
}
if(!st.empty() or !result){
cout<<"no\n";
}
else{
cout<<"yes\n";
}
}
}
LIST
'BOJ 문제풀이' 카테고리의 다른 글
백준 18111번 c++ 풀이 (0) | 2021.08.14 |
---|---|
백준 10773번 c++ 풀이 (0) | 2021.08.13 |
백준 2805번 c++ 풀이 (0) | 2021.08.11 |
백준 1874번 c++ 풀이 (0) | 2021.08.11 |
백준 1654번 c++ 풀이 (복습필요) (0) | 2021.08.10 |