문제 링크 : https://www.acmicpc.net/problem/4949
어떤 문자열이 입력으로 주어졌을 때, 괄호가 균형이 맞는지 판단하여 맞으면 yes, 아니면 no를 출력하는 프로그램을 작성해야 함. 프로그램은 "." 하나를 찍으면 종료된다. 균형이 맞는지에 대한 조건은 아래와 같다.


#include <stdio.h>
//#include <stdlib.h>
//#include <stack>
//#include <string.h>
//using namespace std;
int main(void)
{
char sentence[101];
char stack[101];
int pos = 0;
while (1)
{
gets(sentence);
if (sentence[0] == '.') break;
for (int i = 0; sentence[i] != '.'; i++)
{
if (sentence[i] == ')')
{
if ( pos > 0 && stack[pos-1] == '(') pos--;
else stack[pos++] = sentence[i];
}
else if (sentence[i] == ']')
{
if (pos > 0 && stack[pos - 1] == '[') pos--;
else stack[pos++] = sentence[i];
}
else if (sentence[i] == '(') stack[pos++] = sentence[i];
else if (sentence[i] == '[') stack[pos++] = sentence[i];
}
if (pos <= 0) printf("yes\n");
else printf("no\n");
pos = 0;
}
}
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(void)
{
stack<char> s; //스택 생성
string sentence; //문자 저장 변수 선언
bool flag = 0;
while (1)
{
getline(cin, sentence); //띄어쓰기가 있는 문자를 입력받음
if (sentence == ".") break;
for (int i = 0; sentence[i] != '.'; i++)
{
if (sentence[i] == '(' || sentence[i] == '[') s.push(sentence[i]); //여는 괄호이면 스택에 push
else if (sentence[i] == ')') // 닫는 괄호이면
{
if (!s.empty() and s.top() == '(') s.pop(); //짝을 만났으면 pop
else
{
flag = 1;
break;
} //짝을 못 만났으면 더 이상 탐색할 필요가 없으니 flag = 1로 변경 후 실행 종료
}
else if (sentence[i] == ']')
{
if (!s.empty() and s.top() == '[') s.pop(); //짝을 만났으면 pop
else
{
flag = 1;
break;
} // 짝을 못 만났으면 더 이상 탐색할 필요가 없으니 flag = 1변경 후 실행 종료
}
}
if (s.size() == 0 && flag == 0) cout << "yes\n";
else cout << "no\n"; //스택에 괄호가 남아있거나 flag가 1이라면 no 출력
while (!s.empty())
{
s.pop(); // 스택 초기화
}
flag = 0; //flag 초기화
}
}
import sys
stack = []
while True:
sentence = sys.stdin.readline().rstrip()
flag = True
if sentence == '.':
break
for i in sentence:
if i == '(' or i == '[':
stack.append(i)
elif i == ']':
if stack and stack[-1] == '[':
stack.pop()
else:
flag = False
break
elif i == ')':
if stack and stack[-1] == '(':
stack.pop()
else:
flag = False
break
if not stack and flag:
print("yes")
else:
print("no")
stack = []
flag = True
공감하며 읽었습니다. 좋은 글 감사드립니다.