PS (C, C++)

[백준/C & C++] 9012 괄호

최연재 2023. 2. 23. 09:10

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

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

C

#include <stdio.h>
#include <string.h>

int isvps(char s[])
{
	int index = 0, len = strlen(s);

	for (int i = 0; i < len; i++)
	{
		if (s[i] == '(') index++;
		else
		{
			if (index < 1) return 0;
			else index--;
		}
	}
	if (index == 0) return 1;
	else return 0;
}

int main()
{
	int t;
	scanf("%d", &t);
	for (int i = 0; i < t; i++)
	{
		char s[51];
		scanf("%s", s);
		if (isvps(s)) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

C++

#include <iostream>
#include <cstring>
using namespace std;

int isvps(char s[])
{
	int index = 0, len = strlen(s);
	for (int i = 0; i < len; i++)
	{
		if (s[i] == '(') index++;
		else
		{
			if (index < 1) return 0;
			else index--;
		}
	}

	if (index == 0) return 1;
	else return 0;
}

int main()
{
	int t;
	cin >> t;
	for (int i = 0; i < t; i++)
	{
		char s[51];
		cin >> s;
		if (isvps(s)) cout << "YES\n";
		else cout << "NO\n";
	}
	return 0;
}

 

코드 설명

main함수

테스트케이스 개수를 입력받아 그만큼 반복한다. 반복문 내에서는 입력받을 문자열을 저장할 배열을 선언한 후 입력받는다. isvps 함수를 이용해서 입력된 문자열이 올바른 괄호 문자열인지 확인한다. 올바른 괄호 문자열일 경우 YES를, 아닐 경우 NO를 출력한다. 반복문을 끝나면 프로그램을 종료한다. 

 

isvps 함수

올바른 괄호 문자열인지 확인하는 함수로 올바른 괄호 문자열일 경우 1을, 아닐 경우 0을 반환한다. 매개변수로 문자열을 받아서 검사한다. 반복문으로 문자열의 문자를 하나하나 확인한다.

 

index에는 문자열에서 등장하는 '('의 개수를 저장할 것이고, '('가 있는 상태에서 ')'을 만나면 기본 vps가 하나 생성된 것이므로 idex를 감소시킨다. 만약 index가 0인 상태에서 ')'가 나온다면 vps가 아니므로 바로 0을 반환한다. 

 

반복문이 끝난 상태에서 index가 0이라면 모든 괄호가 짝이 맞아서 vps라는 뜻이므로 1을 반환하고, 그렇지 않을 경우 0을반환한다.

 

느낀 점

index라는 값을 이용해서 vps를 확인할 수 있다는 생각을 한 후에는 빠르게 코드를 작성했다!