- toc {:toc}
๋ฌธ์
์ด๋ฒ ๊ณ์ ํ๊ธฐ์ ์ฌ๋ฆฌํ ๊ฐ๋ก ์ ์๊ฐ ์ค์ธ ํ์์ด๋ ์ค๋ ์์ ๊น์ง ๋ณด๊ณ ์๋ฅผ ์ ์ถํด์ผ ํ๋ค. ๋ณด๊ณ ์ ์์ฑ์ด ๋๋ฌด ์ง๋ฃจํ๋ ํ์์ด๋ ๋ ธํธ๋ถ์ ์๋๋ ค์ ๊พธ๋ฒ ๊พธ๋ฒ ์กธ๋ค๊ฐ ์ ์ถ ๋ง๊ฐ 1์๊ฐ ์ ์ ๊นจ๊ณ ๋ง์๋ค. ์ํ๊น๊ฒ๋ ์๋ ๋์ ํค๋ณด๋๊ฐ ์๋ชป ๋๋ ค์ ๋ณด๊ณ ์์ ๋ชจ๋ ๊ธ์๊ฐ A์ B๋ก ๋ฐ๋์ด ๋ฒ๋ ธ๋ค! ๊ทธ๋์ ํ์์ด๋ ๋ณด๊ณ ์ ์์ฑ์ ๋๋ ค์น์ฐ๊ณ ๋ณด๊ณ ์์์ โ์ข์ ๋จ์ดโ๋ ์ธ๋ณด๊ธฐ๋ก ๋ง์ ๋จน์๋ค.
ํ์์ด๋ ๋จ์ด ์๋ก ์์นํ ๊ณก์ ์ ๊ทธ์ด ๊ฐ์ ๊ธ์๋ผ๋ฆฌ(A๋ A๋ผ๋ฆฌ, B๋ B๋ผ๋ฆฌ) ์์ ์ง๊ธฐ๋ก ํ์๋ค. ๋ง์ฝ ์ ๋ผ๋ฆฌ ๊ต์ฐจํ์ง ์์ผ๋ฉด์ ๊ฐ ๊ธ์๋ฅผ ์ ํํ ํ ๊ฐ์ ๋ค๋ฅธ ์์น์ ์๋ ๊ฐ์ ๊ธ์์ ์ง ์ง์์ ์๋ค๋ฉด, ๊ทธ ๋จ์ด๋ โ์ข์ ๋จ์ดโ์ด๋ค. ํ์์ด๊ฐ โ์ข์ ๋จ์ดโ ๊ฐ์๋ฅผ ์ธ๋ ๊ฒ์ ๋์์ฃผ์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋จ์ด์ ์ N์ด ์ฃผ์ด์ง๋ค. (1 โค N โค 100)
๋ค์ N๊ฐ ์ค์๋ A์ B๋ก๋ง ์ด๋ฃจ์ด์ง ๋จ์ด๊ฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ๋จ์ด์ ๊ธธ์ด๋ 2์ 100,000์ฌ์ด์ด๋ฉฐ, ๋ชจ๋ ๋จ์ด ๊ธธ์ด์ ํฉ์ 1,000,000์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ข์ ๋จ์ด์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ถ์ฒ:https://www.acmicpc.net/problem/3986
ํ์ด
A, B์ ์ซ์๋ฅผ ์ธ์ด ๊ฐ์ผ๋ฉด ์คํ์์ pop๋๋๋ก ํ๊ณ ์๋๋ฉด ์ง์ด๋ฃ๊ณ ๋ง์ง๋ง์ ์ฐธ, ๊ฑฐ์ง ํ๋จ
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n, cntA, cntB, sum = 0;
bool isOK = true;
cin >> n;
while(n--){
string str;
cin >> str;
stack<char> s;
cntA = cntB = 0; // ์ด๊ธฐํ
isOK = trueํ
for(char c : str){
if(s.empty()){ // ์คํ์ด ๋น์์ ๋ ์ฒ๋ฆฌ
if(c == 'A') cntA++;
else cntB++;
s.push(c);
}
else{ // ์คํ์ด ๋น์ด์์ง ์์ ๋
if(s.top() == c){ // ๊ฐ์ ๋ pair๋ก ๋ฌถ์ด์ pop
if(c == 'A') cntA--;
else cntB--;
s.pop();
}
else{ // ๊ฐ์ง ์์ผ๋ฉด ์คํ์ ๋ฃ์ด์ค
if(c == 'A'){
cntA++;
s.push(c);
}
else if(c == 'B'){
cntB++;
s.push(c);
}
}
}
}
if(s.empty() && cntA == 0 && cntB == 0) sum++; // ์ฐธ, ๊ฑฐ์ง ํ๋จ
}
cout << sum << endl;
return 0;
}