- 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;
}