본문 바로가기
Algorithm Trainning/백준 알고리즘(BEAKJOON)

백준 : 9012번, 괄호

by newbie22 2021. 3. 22.

문제 주소 : www.acmicpc.net/problem/9012

정답 비율 : 42.073% (2021.03.21 22:00 기준)

 

9012번: 괄호

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

www.acmicpc.net

 

문제 조건 :

입력 : T개의 데이터가 주어집니다. 각 데이터의 길이는 2 ~ 50입니다.

출력 : 올바른 괄호 문자열이면 "YES" 올바르지 않은 괄호 문자열이면 "NO"를 한 줄에 하나씩 출력합니다.

시간 : 1초

 

문제 풀이 :

기본적인 stack 문제입니다. '('는 push 하고 ')'은 pop을 진행합니다. 모든 push와 pop 진행 후에 stack이 비어있으면 올바른 괄호이고 pop 할 때 스택이 비어있거나 모든 push와 pop 진행 후에 stack이 비어있지 않으면 올바르지 않은 괄호가 됩니다.

 

이때 괄호의 구성은 오로지 '('와 ')'로 이루어지므로 stack을 배열로 구현할 필요 없게 됩니다.

 

코드는 다음과 같습니다.

 

C99

//solve 9012
#include<stdio.h>

int main(void){
	int tc, i, stack;
	char str[51];
	
	scanf("%d", &tc);
	
	while(tc--){
		stack = 0;
		
		scanf("%s", str);
		
		for(i = 0; str[i]; i++){
			
			stack += (str[i] == '(' ? 1 : -1);
			
			if(stack < 0)
				break;
		}
		printf("%s\n", stack == 0 ? "YES" : "NO");
	}
	return 0;
}