문제를 풀자마자 바로 글을 써야겠다. 기억이 잘 안난다.
IDEA
9012 괄호 ( www.acmicpc.net/problem/9012 )와 같다.
몇 번 문장을 받는다와 같은 테스트케이스 갯수가 없다. 온점이 입력될 때까지 문장을 받아야한다.
while문 내에서 getline을 통해 한 줄을 string으로 통으로 받고 인덱스를 하나하나 옮겨가며 본다.
길이가 1이면서 .하나 뿐이라면 break를 걸어 종료한다.
1. ( 혹은 [ 이면 스택에 무조건 넣는다.
2. ] 가 들어오면 현재 스택의 top을 확인한다.
- 스택이 비어있지 않으며 top이 짝을 이루는 [ 라면 pop한다.
- 스택이 비어있다거나, top이 ( 라면 가망이 없다. 균형이 잡히지 않았다. break를 걸어 탈출한다.
3. ) 에 대해서도 2번과 동일하게 진행해준다.
4. while문이 중간에 break되지 않고 완전히 끝났을 경우를 대비해 스택이 비어있는지 확인한다.
모든 괄호,문장에 대해서 작업이 끝났는데도 스택에 뭔가 남아있다면 수가 맞지 않는 괄호세상이기때문이다.
코드
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main() {
while (1) {
string sentence;
getline(cin, sentence);
if (sentence.size() == 1 && sentence[0] == '.') break;
string answer = "yes";
stack<char>s;
for (int i = 0; i < sentence.size(); i++) {
if (sentence[i] == '(' || sentence[i] == '[') s.push(sentence[i]);
else if (sentence[i] == ']') {
if (!s.empty() && s.top() == '[')s.pop();
else {
answer = "no";
break;
}
}
else if (sentence[i] == ')') {
if (!s.empty() && s.top() == '(')s.pop();
else {
answer = "no";
break;
}
}
}
if (!s.empty()) answer = "no";
cout << answer << '\n';
}
}
'알고리즘 > 백준 단계별로 풀기 (12.26 ~ 12.31)' 카테고리의 다른 글
큐 - 백준 1186번 요세푸스 문제0 (0) | 2020.12.27 |
---|---|
큐 - 백준 2164번 카드2 (0) | 2020.12.27 |
브루트포스 - 백준 7568번 덩치 (0) | 2020.12.26 |
브루트포스 - 백준 2798번 블랙잭 (0) | 2020.12.26 |
브루트포스 - 백준 2231번 분해합 (0) | 2020.12.26 |