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