풀이
괄호를 회전하고 올바른 괄호인지를 체크해주는 과정이 필요하다.
문자열을 이어붙이고 인덱스를 이용했다.
올바른 괄호인지 체크해주는 과정은 스택을 이용했다.
의문인점
[{}]() 처럼 [{}] 1개 () 1개 처럼 쌍의 개수를 세어주면 된다고 생각했다.
}]){([])}([{ 에서 }]) 는 큐에 담아주어서 스택에 남은 ([{ 와 짝을 맞춰주어서 맞으면 1을 증가시켜주면 된다고 생각했다.
}]){([])}([{문자열을 {([])}([{}]) 로 바꾸어서 검사하면 총 2개가 나와서 이렇게 하면 되지 않나 생각했다.> {([])}([{}]) , ([{}]){([])}
for문을 한번 돌려서 할 수 있는 방법이 없는지 궁금하다.
#include <string>
#include <vector>
#include<stack>
#include<iostream>
using namespace std;
bool chk(char c,char d)
{
if(c=='('&&d==')')
return true;
else if(c=='{'&&d=='}')
return true;
else if(c=='['&&d==']')
return true;
else
return false;
}
int solution(string s) {
int answer = 0;
int size=s.length();
s=s+s;
for(int index=0;index<size;index++)
{
stack<char>st;
for(int i=index;i<size+index;i++)
{
if(s[i]=='{'||s[i]=='['||s[i]=='(')
st.push(s[i]);
else
{
//cout<<st.top()<<" " <<s[i]<<endl;
if(chk(st.top(),s[i]))
{
st.pop();
}
else
{
st.push(s[i]);
// break;
}
}
}
if(st.empty())
answer++;
}
// if(!st.empty())
// answer=0;
return answer;
}
틀린풀이
#include <string>
#include <vector>
#include<stack>
#include<iostream>
#include<queue>
using namespace std;
queue<char>q;
stack<char>s2;
bool aa(char c,char d)
{
//string tt=c+d;
if(c=='('&&d==')')
return true;
else if(c=='{'&&d=='}')
return true;
else if(c=='['&&d==']')
return true;
else
return false;
}
int solution(string s) {
int answer = 0;
bool chk=false;
int ans=0;
if(s.size()%2)
return 0;
for(int i=0;i<s.length();i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
{
chk=true;
s2.push(s[i]);
}
else
{
if(chk)
{
if(s2.empty())
break;
char ttmp=s2.top();
if(aa(ttmp,s[i]))
{
s2.pop();
if(s2.empty())
ans++;
// cout<<ans<<endl;
}
else
return 0;
}
else
q.push(s[i]);
}
}
//cout<<"ans"<<ans<<endl;
//cout<<"ans"<<q.size()<<" "<<s2.size()<<endl;
while(chk&&!s2.empty()&&!q.empty())
{
char cc=s2.top();
char dd=q.front();
// cout<<cc<<" "<<dd<<endl;
s2.pop();q.pop();
// cout<<cc<<" "<<dd<<endl;
if(!aa(cc,dd))
{
ans=0;
break;
}
if(s2.empty()&&q.empty())
ans++;
}
if(ans>0&&s2.empty()&&q.empty())
answer=ans;
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 삼각 달팽이 c++ (0) | 2023.02.05 |
---|---|
[프로그래머스] 완주하지 못한 선수 c++ (0) | 2023.02.05 |
[프로그래머스] 입국심사 c++ (0) | 2023.01.29 |
[프로그래머스] 더 맵게 / 힙(Heap) c++ (0) | 2023.01.20 |
[프로그래머스] 주차 연습 계산 c++ (2022 KAKAO BLIND RECRUITMENT) (0) | 2023.01.20 |