๐Ÿ• Baaaaaarking/0x08๊ฐ• - ์Šคํƒ์˜ ํ™œ์šฉ (์ˆ˜์‹์˜ ๊ด„ํ˜ธ์Œ)

[BOJ S4}[C++) 4949๋ฒˆ: ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ

์„ ๋‹ฌ 2022. 2. 25. 16:40
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/4949

 

4949๋ฒˆ: ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ

ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ์ค„์— ๊ฑธ์ณ์„œ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๋ฌธ์ž์—ด์€ ์˜๋ฌธ ์•ŒํŒŒ๋ฒณ, ๊ณต๋ฐฑ, ์†Œ๊ด„ํ˜ธ("( )") ๋Œ€๊ด„ํ˜ธ("[ ]")๋“ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ธธ์ด๋Š” 100๊ธ€์ž๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ์ž…๋ ฅ์˜ ์ข…๋ฃŒ์กฐ๊ฑด์œผ๋กœ ๋งจ ๋งˆ

www.acmicpc.net

 

๋ฌธ์ œ

์„ธ๊ณ„๋Š” ๊ท ํ˜•์ด ์ž˜ ์žกํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค. ์–‘๊ณผ ์Œ, ๋น›๊ณผ ์–ด๋‘  ๊ทธ๋ฆฌ๊ณ  ์™ผ์ชฝ ๊ด„ํ˜ธ์™€ ์˜ค๋ฅธ์ชฝ ๊ด„ํ˜ธ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

์ •๋ฏผ์ด์˜ ์ž„๋ฌด๋Š” ์–ด๋–ค ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ด„ํ˜ธ๋“ค์˜ ๊ท ํ˜•์ด ์ž˜ ๋งž์ถฐ์ ธ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์งœ๋Š” ๊ฒƒ์ด๋‹ค.

๋ฌธ์ž์—ด์— ํฌํ•จ๋˜๋Š” ๊ด„ํ˜ธ๋Š” ์†Œ๊ด„ํ˜ธ("()") ์™€ ๋Œ€๊ด„ํ˜ธ("[]")๋กœ 2์ข…๋ฅ˜์ด๊ณ , ๋ฌธ์ž์—ด์ด ๊ท ํ˜•์„ ์ด๋ฃจ๋Š” ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ๋ชจ๋“  ์™ผ์ชฝ ์†Œ๊ด„ํ˜ธ("(")๋Š” ์˜ค๋ฅธ์ชฝ ์†Œ๊ด„ํ˜ธ(")")์™€๋งŒ ์ง์„ ์ด๋ค„์•ผ ํ•œ๋‹ค.
  • ๋ชจ๋“  ์™ผ์ชฝ ๋Œ€๊ด„ํ˜ธ("[")๋Š” ์˜ค๋ฅธ์ชฝ ๋Œ€๊ด„ํ˜ธ("]")์™€๋งŒ ์ง์„ ์ด๋ค„์•ผ ํ•œ๋‹ค.
  • ๋ชจ๋“  ์˜ค๋ฅธ์ชฝ ๊ด„ํ˜ธ๋“ค์€ ์ž์‹ ๊ณผ ์ง์„ ์ด๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์™ผ์ชฝ ๊ด„ํ˜ธ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • ๋ชจ๋“  ๊ด„ํ˜ธ๋“ค์˜ ์ง์€ 1:1 ๋งค์นญ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ๊ด„ํ˜ธ ํ•˜๋‚˜๊ฐ€ ๋‘˜ ์ด์ƒ์˜ ๊ด„ํ˜ธ์™€ ์ง์ง€์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.
  • ์ง์„ ์ด๋ฃจ๋Š” ๋‘ ๊ด„ํ˜ธ๊ฐ€ ์žˆ์„ ๋•Œ, ๊ทธ ์‚ฌ์ด์— ์žˆ๋Š” ๋ฌธ์ž์—ด๋„ ๊ท ํ˜•์ด ์žกํ˜€์•ผ ํ•œ๋‹ค.

์ •๋ฏผ์ด๋ฅผ ๋„์™€ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ท ํ˜•์žกํžŒ ๋ฌธ์ž์—ด์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•ด๋ณด์ž.

์ž…๋ ฅ

ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ์ค„์— ๊ฑธ์ณ์„œ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๋ฌธ์ž์—ด์€ ์˜๋ฌธ ์•ŒํŒŒ๋ฒณ, ๊ณต๋ฐฑ, ์†Œ๊ด„ํ˜ธ("( )") ๋Œ€๊ด„ํ˜ธ("[ ]")๋“ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ธธ์ด๋Š” 100๊ธ€์ž๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

์ž…๋ ฅ์˜ ์ข…๋ฃŒ์กฐ๊ฑด์œผ๋กœ ๋งจ ๋งˆ์ง€๋ง‰์— ์  ํ•˜๋‚˜(".")๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.

์ถœ๋ ฅ

๊ฐ ์ค„๋งˆ๋‹ค ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ๊ท ํ˜•์„ ์ด๋ฃจ๊ณ  ์žˆ์œผ๋ฉด "yes"๋ฅผ, ์•„๋‹ˆ๋ฉด "no"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์Šคํƒ์„ ์ด์šฉํ•œ๋‹ค.

- ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹Œ ์• ๋“ค์€ ์ „๋ถ€ else ๋กœ continue ์ฒ˜๋ฆฌ

- ์—ด๋ฆฐ ๊ด„ํ˜ธ๋Š” ๊ทธ๋ƒฅ push

- ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด top๊ณผ ๋น„๊ตํ•˜์—ฌ ์„ฑ๊ณต ๋ฐ ์‹คํŒจ ์ฒ˜๋ฆฌ

 

์ฐธ๊ณ ๋กœ ๋‚˜๋Š” ๋‘๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„ ๋‘๋ฒˆ ํ‹€๋ ธ๋‹ค

(1) stack์˜ empty๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๊ณ  (๋‚จ์€ ์—ด๋ฆฐ๊ด„ํ˜ธ๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ฉด ์•ˆ๋จ ๋”ฐ๋ผ์„œ ์Šคํƒempty๋„ ํ•˜๋‚˜์˜ ์กฐ๊ฑด)

(2) ๋ฌธ์žฅ ํ•˜๋‚˜์˜ ์—ฐ์‚ฐ์„ ๋๋‚ผ๋•Œ๋งˆ๋‹ค ์Šคํƒ์„ clear ํ•˜์ง€ ์•Š์•˜์Œ..

๊ผญ.. ์ฒ˜๋ฆฌํ•ด์ฃผ์ž 

// Authored by : seondal
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <stack>

using namespace std;

stack<char> s;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
   
    while(true) {
        bool isRight = true;
        string input;
        getline(cin, input);
        
        if(input == ".") break;
        
        for(int i=0; i<input.length(); i++){
            if(input[i] == '(' || input[i] == '[') s.push(input[i]);
            else if (input[i] == ')') {
                if(!s.empty() && s.top() == '(') s.pop();
                else {
                    isRight = false;
                    break;
                }
            }
            else if (input[i] == ']') {
                if(!s.empty() && s.top() == '[') s.pop();
                else {
                    isRight = false;
                    break;
                }
            }
            else continue;
        }
        
        // (1)
        if(isRight && s.empty()) cout << "yes\n";
        else cout << "no\n";
        
        // (2)
        while(!s.empty()) s.pop();
    }
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•