카테고리 없음

[BaekJoon/C] No.9012 : 괄호

ekdnjs510 2024. 11. 4. 21:03
728x90

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

 

소스코드 & 문제풀이

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
 
int main() {
	int T, len; //테스트 개수 T, 문자길이 수 len 변수 선언합니다
	scanf("%d", &T); //테스트 개수를 입력받습니다
	char st[51]; //문자열의 길이는 2이상 50이하 이므로 배열을 51 설정해줍니다
	int left = 0, right = 0;	//left: '('의 개수, right: ')'의 개수를 초기화합니다
 
 	//입력받은 테스트 수만큼 반복합니다
	for (int t = 0; t < T; t++) {
		scanf("%s", st); //배열을 통해 '('나 ')'를 입력 저장합니다
		len = strlen(st); //입력받은만큼 반복하기 위해 문자길이 수를 출력합니다
        
        //문자길이의 수만큼 반복문을 돌며
		for (int i = 0; i < len; i++) {
			if (st[i] == '(') //배열을 돌며 '('와 비교하고 일치하면
            	left++;  //'('의 개수를 세는 left를 증가시키고
			else if (st[i] == ')') right++; //')'와 비교하여 일치하면 right를 증가시켜줍니다
 
			if (right > left) //닫힌 괄호가 더 많으면 해당 반복문을 탈출합니다
				break; 
                //연괄호가 더 많았을 때 성립이 되지않는 이유는 어차피 닫힌괄호도 봐야되므로
                //닫힌 괄호만 확인해주면 됩니다
		}
        //연 괄호와 닫힌 괄호의 개수가 다르면 NO를 출력합니다
		if (left != right)
			printf("NO\n");
		else
			printf("YES\n"); //일치하면 YES를 출력합니다
		left = 0;	// 반복문을 다시 T만큼 돌아야되므로 '('의 개수를 초기화해줍니다
		right = 0;	// 마찬가지로 ')'의 개수를 초기화합니다
	}
}

 

제 입출력 결과

 

728x90