ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฌธ์ œ

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

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

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

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

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

 

<๋ฌธ์ œ ๋งํฌ>

 

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

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

www.acmicpc.net


์ž…๋ ฅ

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

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

์ถœ๋ ฅ

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


๋ฌธ์ œ ํ’€์ด

๊ด„ํ˜ธ์˜ ์ง์ด ๋งž๊ฒŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด ์˜ณ์€ ์˜ˆ์‹œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
( ) ( ) [ ] 

[ ( ) ( ) ]

[ ( ( ) ) ]

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ž˜๋ชป๋œ ์ƒํ™ฉ์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”?

 

๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ์—ด๋ฆฐ ๊ด„ํ˜ธ๋ณด๋‹ค ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ์™€

์—ด๋ฆฐ ๊ด„ํ˜ธ ๋‹ค์Œ์œผ๋กœ ์˜ค๋Š” ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ์ง์ด ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ์ €์žฅ์„ ํ•ด๋’€๋‹ค๊ฐ€ ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋Š” ์ˆœ๊ฐ„ 

์กฐ๊ฑด๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ์ƒํ™ฉ์„ ํŒ๋‹จํ•˜๋ฉด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๊ด„ํ˜ธ๋ฅผ ์ €์žฅํ•  ์ž๋ฃŒ๊ตฌ์กฐ๋กœ๋Š” ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์ง€๋งŒ ๋‹ซํžŒ ๊ด„ํ˜ธ๋ฅผ ํŒ๋‹จํ•  ๋•Œ ์ค‘์š”ํ•œ ๊ฒƒ์€

์ตœ๊ทผ์— ์ €์žฅ๋œ ๋‹ซํžŒ ๊ด„ํ˜ธ์ด๋ฏ€๋กœ FILO๋ฐฉ์‹์˜ ์Šคํƒ์„ ์ด์šฉํ•˜์—ฌ ๊ด„ํ˜ธ๋ฅผ ์ €์žฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํ’€์ด ์ˆœ์„œ

1. ์—ด๋ฆฐ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ์Šคํƒ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

2. ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ๋ฌธ์ œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.

- ๋งŒ์•ฝ, ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ์ง์ด ์—†์ด ๋จผ์ € ๋‚˜์˜จ๋‹ค๋ฉด "no"

- ์ด์ „ ์—ด๋ฆฐ ๊ด„ํ˜ธ๊ฐ€ ๋‹ซํžŒ ๊ด„ํ˜ธ์™€ ์ง์ด ๋งž์ง€ ์•Š๋Š”๋‹ค๋ฉด "no"

- ์ด์ „ ์—ด๋ฆฐ ๊ด„ํ˜ธ์™€ ๋‹ซํžŒ ๊ด„ํ˜ธ์™€ ์ง์ด ๋งž๋‹ค๋ฉด, ๋‹ซํžŒ ๊ด„ํ˜ธ๋ฅผ ์Šคํƒ์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

3. ์Šคํƒ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

 

โ—๏ธ์ถ”๊ฐ€ ๋ฐ˜๋ก€ (์งˆ๋ฌธ ๊ฒŒ์‹œํŒ ํ™œ์šฉ)

์•„๋ž˜๋Š” ๋‹ค "no"๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ([(]])
  • ([)]).
    .
  • (()))
    .
  • [(()]).
    .
  • (
  • (
    .

ํ’€์ด ์ฝ”๋“œ

< Swift>

// Swift
// ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ
while let str = readLine(), str != "." {
    
    var s = [Character]()  // stack
    
    for char in str {
        
        if char == "[" || char == "(" {
            s.append(char)
        } else if let last = s.last {
            if (last == "[" && char == ")") || (last == "(" && char == "]") { // ๋‹ซ๋Š” ๊ด„ํ˜ธ์™€ ์Šคํƒ์˜ top ๊ด„ํ˜ธ๊ฐ€ ์ง์ด ์•„๋‹ˆ๋ผ๋ฉด
                break
            } else if last == "[" && char == "]" {  // ์ง์ด ๋งž๋‹ค๋ฉด
                s.removeLast()
            } else if  last == "(" && char == ")" {
                s.removeLast()
            }
        } else if char == "]" || char == ")" {  // ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋ฉด
            s.append(char)  //  ์Šคํƒ์— pushํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
            break
        }
    }
    
    // ์Šคํƒ์— ๊ด„ํ˜ธ ์œ ๋ฌด ํ™•์ธ
    if !s.isEmpty {
        print("no")
    } else {
        print("yes")
    }
}
// Swift
// ์ตœ์ ํ™”
while let str = readLine(), str != "."  {
    
    var s = [Character]()  // stack
    var isValid = true
    
    for a in str {
        if a == "(" || a == "[" {
            s.append(a)
        } else if a == ")" {
            if s.isEmpty || s.last != "(" {
                isValid = false
                break
            } else {
                s.removeLast()
            }
                
        } else if a == "]" {
            if s.isEmpty || s.last != "[" {
                isValid = false
                break
            } else {
                s.removeLast()
            }
        }
    }
    
    if s.isEmpty && isValid {
        print("yes")
    } else {
        print("no")
    }
    
}

< C++>

// C++
#include <bits/stdc++.h>
using namespace std;

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    while(true){
        string a;
        getline(cin, a);
        if(a == ".") break;
        
        stack<char> s;
        bool isValid = true;
        
        for (auto c : a){
            if(c == '(' || c == '[') s.push(c);
            else if(c == ')'){
                if(s.empty() || s.top() != '('){ 
                    isValid = false;
                    break;
                }
                
                s.pop();
            }
            else if(c == ']'){
                if(s.empty() || s.top() != '['){
                    isValid = false;
                    break;
                }
                s.pop();
            }
            
        }
        
        if(isValid && s.empty()){
            cout << "yes" << '\n';
        } else cout << "no\n";
    }
}

๋งˆ๋ฌด๋ฆฌ

๋ชจ๋“  ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.์ €๋Š” ์ฒ˜์Œ์— ๋‹ค๋ฅธ ์ง์˜ ๊ด„ํ˜ธ๊ฐ€ ์˜ค๋Š” ์˜ˆ์™ธ๋ฅผ ์ฝ”๋“œ์— ์ž‘์„ฑํ•˜์ง€ ์•Š์•„ ์˜ค๋žœ ์‹œ๊ฐ„ ๊ณ ๋ฏผ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ญ

 

๋˜ํ•œ, ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ๊ณ ๋ คํ–ˆ๋‹ค๊ณ  ํ•ด๋„, ํ•ด๋‹น ๋…ผ๋ฆฌ๋ฅผ ์ฝ”๋“œ์— ์ž˜ ๋…น์—ฌ๋‚ด๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด, Swift์˜ ๊ฒฝ์šฐ ๋‘ ๊ฐœ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ,  ๊ฐ™์€ ๋…ผ๋ฆฌ์˜ ์ฝ”๋“œ๋ผ๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ๋” ์ข‹์€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

๋ชจ๋“  ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜๊ณ , ํ•ด๋‹น ๋…ผ๋ฆฌ๋ฅผ ์ฝ”๋“œ์— ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ์—ฐ์Šต๋„ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐Ÿค“