알고리즘/SW Expert Academy
1218. 괄호 짝짓기 풀이
IMyoungho
2020. 3. 4. 19:34
이번에 풀어볼 문제는 괄호 짝짓기이다.
알고리즘 문제는 간단하게 풀이만 적도록 하려고 한다.
대충 이러한 문제이다.
* 이번 문제를 풀면서 중요하게 기억해야할 내용 *
1. stack 사용법과 다음 테스트 케이스를 위해 stack을 비워줘야함
2. 어떤식으로 탐색을 진행할 것인지 파악
-> 한쪽 형태의 모양을 스택에 우선 넣고나서 비교
3. 가장 중요한건 문제를 제대로 파악하는 것
-> 단순히 짝만 맞추는 것이 아니다. 문제에는 상세히 설명하지 않아서 안나왔지만
가장 처음과 마지막은 괄호는 항상 '(' ')' 이런식으로 닫는 형태여야하며
')' '(' 이렇게 는 자릴 바꾸면 한쌍이겠지만 문제에서는 한쌍으로 인정하지 않는다...
#include <iostream>
#include <stack>
using namespace std;
int main() {
for(int a=1; a<=10; a++){
stack<char>s;
int count;
string str;
cin >> count;
cin >> str;
for(int i=0; i<str.length(); i++){
if(str[i]=='{' || str[i]=='[' || str[i]=='(' || str[i]=='<')
s.push(str[i]);
else if(s.top()=='{' && str[i]=='}')
s.pop();
else if(s.top()=='[' && str[i]==']')
s.pop();
else if(s.top()=='(' && str[i]==')')
s.pop();
else if(s.top()=='<' && str[i]=='>')
s.pop();
else
s.push(str[i]);
}
if(!s.empty())
cout << "#" << a << " " << "0" << endl;
else
cout << "#" << a << " " << "1" << endl;
}
return 0;
}
반응형