[백준] 9012번: 괄호 (C언어)

728x90
728x90

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

 

9012번: 괄호

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

www.acmicpc.net

난이도: solved.ac 실버 4

 

 

괄호 문자열이 VPS가 아닌 경우는 아래와 같다

 

(case 1) 문자열 내의 '('의 개수가 ')'의 개수와 다를 때

 

(case 2) 문자열의 괄호를 하나씩 보며 개수를 세다가 ')'의 개수가 앞의 '(' 개수보다 많아질 때

 

첫 번째 조건은 당연한거니 설명하지 않겠다

 

두 번째 조건의 예시는 다음과 같다

 

Ex. (case 2)

( ( ) ) ) (

위의 문자열에서 '('와 ')'의 개수는 서로 같다

 

하지만 ')'의 개수가 '('의 개수보다 많아지는 순간이 있다

 

( ( ) ) ) (

 

다섯 번째 괄호 기호에서 ')'의 개수가 '('의 개수보다 많아지게 된다

 

그러면 뒤의 문자들은 볼 필요도 없이 올바르지 않은 괄호 문자열이라는 걸 알 수 있다

 

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

int main() {
	int T, t, i, len;
	scanf("%d", &T);
	char st[51];
	int left = 0, right = 0;	// left: '('의 개수, right: ')'의 개수

	for (t = 0; t < T; t++) {
		scanf("%s", st);
		len = strlen(st);
		for (i = 0; i < len; i++) {
			if (st[i] == '(') left++;
			else if (st[i] == ')') right++;

			if (right > left)
				break;
		}
		if (left != right)
			printf("NO\n");
		else
			printf("YES\n");
		left = 0;	// '('의 개수 초기화
		right = 0;	// ')'의 개수 초기화
	}
}
반응형