IT_study/Coding test

[Coding test Basic with c++] 올바른 괄호

meong_j 2021. 12. 16. 23:12
728x90
반응형

문제

괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.

▣ 입력설명 첫 번째 줄에 괄호 문자열이 입력됩니다.
문자열의 최대 길이는 30이다.

▣ 출력설명 첫 번째 줄에 YES, NO를 출력한다.

 

입력예제

(()(()))(()

출력예제

NO

 

풀이

#include<stdio.h>
using namespace std;

int main(){
	// 올바른 괄호 
	char a[100];
	int i, cnt=0;
	scanf("%s", &a);
	for(i=0; a[i]!='\0'; i++){
		if(a[i]=='(') cnt++;
		else if(a[i]==')') cnt--;
		if(cnt<0) break;
	}
	
	if(cnt==0) printf("YES\n");
	else printf("NO\n");
	
   	return 0;
    
}

'(' 과 ')' 이 한 쌍씩으로 있어야 올바른 괄호기 때문에 '(' 면 개수를 더하고(+), ')' 면 개수를 빼는(-) 형식으로 해서 마지막 카운트가 0이면 괄호 한 쌍씩 생긴다는 말이되게 된다.

하지만 다음과 같은 경우가 생기면 결과는 0이지만, 괄호 한 쌍씩 올바른 괄호가 아니게 된다. 이럴 경우 음수(-) 값이 나오면 무조건 잘못된 괄호기 때문에 break로 끝내면 된다.  

(  (  )  )   )   (
1 2 1 0  -1  0
반응형