Baekjoon

[백준 9012] 괄호

h32j00 2020. 10. 16. 20:26

 

 

다른 분들은 배열을 이용해서 풀었길래 카운트만 가지고 풀어봤습니다.

고려할 점

1. '('을 입력받을 때는 아무조건없이 카운트를 센다.

2. ')'을 입력받을 때는 '('의 카운트값과 비교해서 카운트를 센다. 

   --> 즉, 현재 입력받은 괄호 중에서 여는 괄호보다 닫는 괄호가 많아버리면 그 자리에서 반복문을 끝내고 NO를  출력하게 된다.

 

다음은 C언어로 작성한 코드입니다.

#pragma warning(disable : 4996)
#include <stdio.h>

int main()
{
	int T;
	char input[51];
	int i, j, o_cnt = 0, c_cnt = 0;
	scanf("%d", &T);
	for (i = 0;i < T;i++) {
		scanf("%s", input);
		for (j = 0;j < strlen(input);j++)
		{
			if (input[j] == '(') o_cnt++;
			else {
				if ((c_cnt + 1) <= o_cnt) c_cnt++;
				else { c_cnt = -1;break; }
			}
		}
		if (o_cnt == c_cnt) printf("YES\n");
		else printf("NO\n");
		o_cnt = 0;
		c_cnt = 0;
	}
}

 

다른 풀이법(스택 이용)

1. 입력받은 '('을 스택에 push한다.

2. ')'가 입력받아지면 스택에서 '('를 pop한다.

3. 입력이 끝나고 스택이 비어있지 않으면 "NO"를 출력한다. (VPS라면 스택의 모든 '('가 pop되어야 정상이기 때문)