Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

폐관수련

[스택] 괄호 검사 (c#) 본문

Programming/algorithm

[스택] 괄호 검사 (c#)

믜믜 2021. 9. 25. 18:02
  • C언어로 쉽게 풀어쓴 자료구조(생능출판)의 예제를 C#으로 작성
  • 스택을 배열로 구현

Q) 프로그램에서는 여러 가지 종류의 괄호들이 사용. 괄호들은 항상 쌍이 되게끔 사용해야 한다.

 

조건

  • 왼쪽 괄호의 개수와 오른쪽 괄호의 개수가 같아야 함
  • 같은 종류의 괄호에서 왼쪽 괄호는 오른쪽 괄호보다 먼저 나와야 함
  • 서로 다른 종류의 왼쪽 괄호와 오른쪽 괄호 쌍은 서로를 교차하면 안 됨

 

using System;

class Program
{
    static void Main(string[] args)
    {
    	int check_matching(string inputValue)
        {
            Stack s = new Stack(inputValue.Length);
            string saveString, openString;

            for (int i = 0; i < inputValue.Length; i++)
            {
            	saveString = inputValue[i].ToString();

                switch (saveString)
                {
                    case "(":
                    case "[":
                    case "{":
                        s.push(saveString);
                        break;

                    case ")":
                    case "]":
                    case "}":
                        if (s.is_Empty()) return 0;

                        openString = s.pop();

                        if ((openString == "(" && saveString != ")") ||
                            (openString == "[" && saveString != "]") ||
                            (openString == "{" && saveString != "}"))
                            return 0;
                        break;
                }
            }

            if (!s.is_Empty()) return 0;

            return 1;
        }
        
        Console.WriteLine(check_matching("s{{([fdfs]sdf)sdf}}"));
    }

}

class Stack
{
    private int Top;
    private int StackSize;
    private string[] stack;

    public int _Top { get => Top; }

    public Stack(int stackSize)
    {
        Top = -1;
        stack = new string[stackSize];
        StackSize = stackSize;
    }

    public bool is_Empty()
    {
        if (Top == -1) return true;
        else return false;
    }

    public bool is_full()
    {
        if (Top == (StackSize - 1)) return true;
        else return false;
    }

    public void push(string inputValue)
    {
        if (is_full()) return;

        stack[++Top] = inputValue;
    }

    public string pop()
    {
        if (is_Empty()) return string.Empty;

        return stack[Top--];
    }

    public string peek()
    {
        if (is_Empty()) return string.Empty;

        return stack[Top];
    }
}

 

 

Comments