Algorithm/문제풀이

괄호

lee308812 2021. 2. 19. 00:30

9012번: 괄호 (acmicpc.net)

 

9012번: 괄호

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

www.acmicpc.net

예제 입력 1

6

(())())

(((()())()

(()())((()))

((()()(()))(((())))()

()()()()(()()())()

(()((())()(

예제 출력 1

NO

NO

YES

NO

YES

NO

예제 입력 2

3

((

))

())(()

예제 출력 2

NO

NO

NO

 

 

- 스택을 사용하여 풀 수도 있지만, 간단한 방법이 있다.

- cnt 변수를 두고 0으로 시작하여 '(' 이면 증가시키고 ')'이면 감소시킨다.  최종적으로 cnt == 0이면 올바른 괄호이다.

- 단, cnt == 0일 경우라도 올바른 괄호가 아닌 경우가 있다.

  ex. )(()

  따라서, 조건이 하나 더 필요한데, cnt가 0보다 작으면 현재 열린괄호 수보다 닫힌 괄호 수가 더 많다는 의미이므로, 잘못된 괄호로 판정하면 된다.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

const int MAX_SIZE = 55;

int main(void)
{
	int TC = 0;
	scanf("%d", &TC);
	
	while (TC-- > 0)
	{
		char input[MAX_SIZE + 1];

		int cnt = 0;

		scanf("\n%s", input);

		for (int i = 0; input[i]; i++)
		{
			if (input[i] == '(') cnt++;
			else if (input[i] == ')') cnt--;

			if (cnt < 0) break;
		}

		if (cnt == 0)
			printf("YES\n");
		else
			printf("NO\n");
	}

	return 0;
}

'Algorithm > 문제풀이' 카테고리의 다른 글

[Leetcode] Duplicate Zeros  (0) 2021.06.26
[Leetcode] Squares of a Sorted Array  (0) 2021.06.26
[Brute Force] 캠프 준비  (0) 2020.03.05
[Brute Force] 두 스티커  (0) 2020.03.04
[Brute Force] 나3곱2  (0) 2020.03.04