폐관수련
[스택] 괄호 검사 (c#) 본문
- 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